RubyLambdas
示例
#使用箭头语法的lambda hello_world = -> { 'Hello World!' } hello_world[] #'你好,世界!' #使用箭头语法的lambda accepting 1 argument hello_world = ->(name) { "Hello #{name}!" } hello_world['Sven'] # "你好,斯文!" the_thing = lambda do |magic, ohai, dere| puts "magic! #{magic}" puts "ohai #{dere}" puts "#{ohai} means hello" end the_thing.call(1, 2, 3) #魔法!1 #奥海3 #2表示你好 the_thing.call(1, 2) #ArgumentError:参数数量错误(2个代表3个) the_thing[1, 2, 3, 4] #ArgumentError:参数数量错误(4个代表3个)
您还可以->用来创建和.()调用lambda
the_thing = ->(magic, ohai, dere) { puts "magic! #{magic}" puts "ohai #{dere}" puts "#{ohai} means hello" } the_thing.(1, 2, 3) # => magic! 1 # => ohai 3 # => 2 means hello
在这里,您可以看到lambda与proc几乎相同。但是,有一些警告:
强制执行lambda的论点;将错误数量的参数传递给lambda会引发ArgumentError。它们仍然可以具有默认参数,splat参数等。
return从lambda内部返回的结果是从lambda返回的,而return从proc返回的结果是在封闭范围之外的:
deftry_proc
x=Proc.new{
return#从try_proc返回
}
x.call
puts"Afterx.call"#这条线永远不会到达
end
deftry_lambda
y=->{
return#从y返回
}
y.call
puts"Aftery.call"#此行不跳过
end
try_proc#无输出
try_lambda#Outputs"Aftery.call"