方法和proc对象有什么区别?

Kra*_*thi 9 ruby methods lambda proc

我知道Ruby中的方法不是对象,而是procs和lambdas.除此之外,他们之间有什么区别吗?因为我们都可以传球.是什么让proc对象与方法不同?

方法:

1.8.7-p334 :017 > def a_method(a,b)
1.8.7-p334 :018?>   puts "a method with args: #{a}, #{b}"
1.8.7-p334 :019?>   end
1.8.7-p334 :021 > meth_ref = Object.method("a_method")
 => #<Method: Class(Object)#a_method> 
1.8.7-p334 :022 > meth_ref.call(2,3)
Run Code Online (Sandbox Code Playgroud)

Proc对象:

  a = lambda {|a, b| puts "#{a}, #{b}"}
  a.call(2,3)
Run Code Online (Sandbox Code Playgroud)

use*_*951 7

你在你的问题中说"方法不是对象",但你必须小心区分"方法"和Method.

"方法"是一组定义的表达式,它们被赋予一个名称并放入特定类的方法表中,以便以后轻松查找和执行.

self对象(或类似的call物体)是通过调用创建的实际Ruby对象Proc/ self/等并通过一个"方法"作为参数的名称.

您可能会发现有用的信息的RDoc文档Proc,MethodMethod.RDoc页面列出了每种类型可用的不同实例方法.

基本上,UnboundMethod对象被"绑定"到一个对象,以便method在您使用instance_method该方法时指向该对象,并且该对象Proc没有该行为; UnboundMethod取决于Method创建/调用的上下文.