2008-09-14 [長年日記]

_ [ruby] proc/lambda

RUBY_DESCRIPTION
#=> ruby 1.9.0 (2008-09-14 revision 19335) [i686-linux]

def m
  [[1, 2], [3]].each do |a|
    yield(*a)
  end
end

# method
m{|a, b = :default| p [a, b]}
# => [1, :default], [3, :default]

# proc
pr = proc{|a, b = :default| p [a, b]}
m(&pr)
#=> [1, :default], [3, :default]

# lambda
lmd = lambda{|a, b = :default| p [a, b]}
m(&lmd)
#=> [1, 2], [3, :default]
  • proc{} ではデフォルト値を付けちゃうと常にその値になっちゃう
  • メソッドに付けたブロックは proc{} と同じ挙動

と、いうことでいいんだろか?lambda(-> も同じ)の挙動の方が便利そうだけど……

ホントに知りたいのは、M-x xmp で 1.8 と 1.9 を切り替える方法だったりする。

[]

«前の日記(2008-08-31) 最新