青山です。

{} と do .. end の差はこれだけでしょうか?

> foobar a, b do .. end   # foobar がイテレータとして呼び出されます
> foobar a, b { .. }      # b がイテレータとして呼び出されます

もし差がこれだけであり、foo = bar a, b do .. end の実装が困難なようで
あれば、思い切って {} と do .. end を同じ優先順位にしても良いように思
いますが、いかがでしょうか?

そのような変更をした場合、

foobar a, b do .. end

を

foobar(a, b) do .. end

と書かなければならないという点で互換性が無くなりますが、lib/* sample/*
以下では foobar a, b do .. end という記述はみあたらないようです。

むしろ、

cal.rb:    a.scan(/./no) do |c|
rbc.rb:      @OP.def_rules(" ", "\t", "\f", "\r", "\13") do
rbc.rb:      @OP.def_rule("#") do
以下 rbc.rb では多数
sieve.rb:  (i*i).step(max, i) do |j|
base64.rb:  encode64(bin).scan(/.{1,#{len}}/o) do
date2.rb:    @jd.downto(min.jd) do |jd|
date2.rb:    @jd.upto(max.jd) do |jd|
ftplib.rb:      retrbinary("RETR " + remotefile, blocksize) do |data|
ftplib.rb:      storbinary("STOR " + remotefile, f, blocksize) do |data|
ftplib.rb:    retrlines(cmd) do |line|
jcode.rb:    self.scan(/(.|\n)-(.|\n)|(.|\n)/) do |r|
jcode.rb:      self.gsub!(/(.|\n)/) do |c|
以下 jcode.rb でも多数
matrix.rb:      0.upto(row_size - 1) do
matrix.rb でも多数
mkmf.rb:  Find.find("lib") do |f|
ping.rb:      timeout(timeout) do
pstore.rb:      File::open(@filename, "r") do |file|
sync.rb:      ObjectSpace.define_finalizer(obj) do |id|
以下略

と、foobar(a, b) do .. end という書き方は多数使われています。

これらの事から、foobar(a, b) do .. end は十分になじみがある書き方であ
り、それを代入が必要な場合に {} に書き換えなければならないというのは十
分に不便な事であると思われますが、いかがでしょうか。


-- 
青山 和光 Wakou Aoyama <wakou / fsinet.or.jp>