我怀疑的几乎是误解......
根据我的阅读,block
是由{}
或do
和end
括起来的一组代码。
根据我的理解,Proc
或Lambda
的作用是:
block
block
分配给variable
这意味着什么;我们不需要一直重复整个block
。
但是,Proc
,Lambda
和标准Method
之间有什么区别?根据我的理解,他们都以同样的方式工作。
答案 0 :(得分:1)
Proc
s(和lambdas)和方法之间存在一个重要区别。 Proc
是对象,方法不是。而且由于Ruby是一种面向对象的语言,在这种语言中你只能对对象做事,而非常很重要。
因此,如果你想将一段代码传递给一个方法,你需要有一个对象,这就是Proc
提供的。
你可以通过Object#method
方法获取代表方法的代理对象,该方法将返回Method
类的实例(鸭子类型{{1} }})。
答案 1 :(得分:0)
红宝石中的所有东西都被认为是一个物体。 Proc
和lambda
基本上是类似的结构。就使用情况而言,该主题是高度自以为是。
关键优势在于它们可以轻松传递到其他blocks
,语法简短而且甜美。请考虑以下非常简单的示例:
multiply = Proc.new {|x,y| x*y}
subtract = lambda {|x,y| x-y}
add = ->(x,y) {x+y}
def do_math (opr, *b)
opr.each do |bloc|
puts bloc.call(b[0],b[1])
end
end
do_math([multiply, subtract, add], 10, 5)
# => 50
# => 5
# => 15
puts multiply.call(5,5)
# => 25
puts subtract.call(5,5)
# => 0
puts add.call(5,5)
# => 10
要更好地掌握它们的内容,请观看此视频:An Introduction to Procs, Lambdas and Closures in Ruby
此外,文档中还有更多示例:http://www.ruby-doc.org/core-2.0.0/Proc.html
答案 2 :(得分:-1)
我发现这个Codecademy section有助于区分。