青山です。
{} と 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>