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)
你在你的问题中说"方法不是对象",但你必须小心区分"方法"和Method
.
"方法"是一组定义的表达式,它们被赋予一个名称并放入特定类的方法表中,以便以后轻松查找和执行.
甲self
对象(或类似的call
物体)是通过调用创建的实际Ruby对象Proc
/ self
/等并通过一个"方法"作为参数的名称.
您可能会发现有用的信息的RDoc文档Proc
,Method
和Method
.RDoc页面列出了每种类型可用的不同实例方法.
基本上,UnboundMethod
对象被"绑定"到一个对象,以便method
在您使用instance_method
该方法时指向该对象,并且该对象Proc
没有该行为; UnboundMethod
取决于Method
创建/调用的上下文.