我知道 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)
Proc对象:
a = lambda {|a, b| puts "#{a}, #{b}"}
a.call(2,3)
答案 0 :(得分:6)
你在问题中说过&#34;方法不是对象&#34;但是你必须要小心区分&#34;方法&#34;和Method
。
A&#34;方法&#34;是一组已定义的表达式,它们被赋予一个名称并放入特定类的方法表中,以便以后轻松查找和执行。
Method
对象(或类似的UnboundMethod
对象)是通过调用method
/ instance_method
/等创建的实际Ruby对象并传递&的名称#34;方法&#34;作为论点。
您可能会发现阅读UnboundMethod
,Method
和Proc
的RDoc文档非常有用。 RDoc页面列出了每种类型可用的不同实例方法。
基本上,Method
对象是&#34;绑定&#34;到某个对象,以便self
在您call
方法时指向该对象,并且Proc
没有该行为; self
取决于创建/调用Proc
的上下文。
答案 1 :(得分:2)
块和过程之间的差异
procs和lambdas之间的差异
return
关键字这里解释得很好(我刚从下面的链接中复制了它)
http://awaxman11.github.io/blog/2013/08/05/what-is-the-difference-between-a-block/