我正在阅读有关Ruby 1.9的文章。使用call
的{{1}}方法有很多用途。
但是使用最新版本的Ruby,我得到了这个:
Object
我认为在某些版本的Ruby(可能是1.9)中,方法已重命名。但我不确定。请说清楚。
答案 0 :(得分:14)
首先,send
和call
是两种截然不同的方法。
在ruby中,面向对象的概念源于Smalltalk。基本上,当您调用方法时,您发送该对象消息。因此,当您想要动态调用对象上的方法时,您调用的方法是send
。这种方法至少存在于红宝石中1.8.7。
在红宝石中,我们也有“块”的概念。块是附加到方法调用结束的do...end
个东西。块传统上可以yield
到;或者,完全可以从块(Proc
)中创建一个对象,然后传递它。为了执行该块,您可以在块上调用call
。
call
上定义 Object
,而在所有内容上都定义了send
。
(注意:由于某种原因,call
似乎没有2.3.0文档中的文档;但是,它仍然存在并且在2.2.0中做同样的事情,所以我链接了而是那个。)