lambda 式 コミット

ということで、早速試したんですが、(snapshot です。CVS は環境が許さないので)

$ ./ruby -ve '
h = { "a" => "A", "b" => nil, "c" => "C" }
h.each ->(k, v="none") {
  puts "#{k} : #{v}"
}
'
ruby 1.9.0 (2005-07-27) [i686-linux]
a : A
b :
c : C

あわわゎわゎ…。もしかして 上の例 と の例、思いっきし間違ってます?


間違ってたら急いで直しますので、コメントよろしくお願いします。>誰かー


追記
コメントありがとうございます。"none" は使われないので、やっぱり例が良くないですね。


block は、

$ ./ruby -ve '
def m; yield 1, 2; end
m ->(x, y, z=4|1) {
  puts "#{x} : #{y} : #{z}"
}'
ruby 1.9.0 (2005-07-27) [i686-linux]
1 : 2 : 5

lambda は、

$ ./ruby -ve '
f = ->(x, y, z=4|1) {
  puts "#{x} : #{y} : #{z}"
}
f.call(1,2)
'
ruby 1.9.0 (2005-07-27) [i686-linux]
1 : 2 : 5

にするとちょっとマシかな〜?うーむ。
もっと良い案ないでしょうか>誰か (とまた助けを呼ぶ)


追記 2
なかださんコメントありがとうございます。

$ ./ruby -ve '
[["a", "A"], ["b"], ["c", "C"]].each ->(k, v="none") {
  puts "#{k} : #{v}"
}'
ruby 1.9.0 (2005-07-27) [i386-cygwin]
a : A
b : none
c : C

確かに。


サンプルの変数名を hash としたのはイケてませんね。といいつつ

hash = [["a", "A"], ["b"], ["c", "C"]]

と言い張る。orz