当我们有方法时,Procs和Lambdas

时间:2014-01-18 16:27:14

标签: ruby

我怀疑的几乎是误解......

根据我的阅读,block是由{}doend括起来的一组代码。

根据我的理解,ProcLambda的作用是:

  1. 获取此block
  2. block分配给variable
  3. 这意味着什么;我们不需要一直重复整个block

    但是,ProcLambda和标准Method之间有什么区别?根据我的理解,他们都以同样的方式工作。

3 个答案:

答案 0 :(得分:1)

Proc s(和lambdas)和方法之间存在一个重要区别。 Proc是对象,方法不是。而且由于Ruby是一种面向对象的语言,在这种语言中你只能对对象做事,而非常很重要。

因此,如果你想将一段代码传递给一个方法,你需要有一个对象,这就是Proc提供的。

可以通过Object#method方法获取代表方法的代理对象,该方法将返回Method类的实例(鸭子类型{{1} }})。

答案 1 :(得分:0)

红宝石中的所有东西都被认为是一个物体。 Proclambda基本上是类似的结构。就使用情况而言,该主题是高度自以为是。

关键优势在于它们可以轻松传递到其他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有助于区分。