我正在阅读一篇有关 Ruby 1.9 的文章。有很多用途call
方法与Object
.
但在最新版本的 Ruby 中,我得到了这个:
BasicObject.methods.include? :send # => true
BasicObject.methods.include? :call # => false
Object.methods.include? :call # => false
def foo
puts 'text'
end
Object.send :foo # => text
Object.call :foo # => NoMethodError: undefined method `call' for Object:Class
我认为在 Ruby 的某些版本(可能是 1.9)中,方法被重命名了。但我不确定。请说清楚。
首先,send
and call
是两种截然不同的方法。
在 Ruby 中,面向对象的概念源于 Smalltalk。基本上,当你调用一个方法时,你是sending该对象amessage。所以,当你想动态调用一个对象的方法时,你调用的方法是send http://ruby-doc.org/core-2.3.0/Object.html#method-i-send。这个方法至少从 1.8.7 开始就存在于 ruby 中。
在Ruby中,我们还有一个“块”的概念。块是do...end
附加在方法调用末尾的东西。块可以是传统的yield
编为;或者,完全有可能从块(一个Proc http://ruby-doc.org/core-2.2.0/Proc.html),然后将其传递出去。为了执行该块,您可以调用call http://ruby-doc.org/core-2.2.0/Proc.html#method-i-call在街区上。
call
从未定义过Object
, 然而send
被定义在一切上。
(注:由于某种原因,call
2.3.0文档中似乎没有文档;然而,它仍然存在,并且从 2.2.0 开始做同样的事情,所以我链接了那个。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)