Ruby1.9 lambdaの書き方メモ
普通のlambdaの書き方
la = lambda {|x, y| return x * y } puts la.(2, 1) => 2
かっこをdoにした場合
la = lambda do |x, y| return x * y end puts la.(2, 2) => 4
Ruby1.9からは 「lambda」の代わりに「->」を使えるようになったらしす。ただ、lambdaをそのまま->に変えるだけじゃなくて、パラメータの位置がかっこ({)の前に来る。
la = ->(x, y) { return x * y } puts la.(2, 3) => 6
呼び出すには次の書き方もできる。
puts la[2, 4] => 8
かっこの代わりにdoを使った場合
la = ->(x, y) do return x * y end puts la[2, 5]
「->」とパラメータの「(」の間にスペースがあるとエラーになる。以下はエラー
la = -> (x, y) do return x * y end puts la[2, 6] lambda.rb:23: syntax error, unexpected tLPAREN_ARG, expecting keyword_do_LAMBDA or tLAMBEG la = -> (x, y) do ^
以下いろいろ試してみたメモ
# 配列dataの中からlaで渡した条件にマッチしたものだけ返す def filter(data, la) f = [] data.each do |d| f.push d if la.call d end f end data = [1, 5, 2, 6, 3, 7, 4, 8] f = filter data, ->(x) { x > 5 } p f =>[6, 7, 8] f = filter data, ->(x) do x > 5 end p f =>[6, 7, 8] # いっぱいらむだを渡してみた def test(la1, la2, la3) p la1.call 'la1' p la2.call 'la2' p la3.call 'la3' end test ->(x) {"hello #{x}"}, ->(x) {"hello #{x}"}, ->(x) {"hello #{x}"} =>"hello la1" "hello la2" "hello la3"