Ruby`send` vs`call`方法

时间:2016-02-15 01:49:06

标签: ruby

我正在阅读有关Ruby 1.9的文章。使用call的{​​{1}}方法有很多用途。

但是使用最新版本的Ruby,我得到了这个:

Object

我认为在某些版本的Ruby(可能是1.9)中,方法已重命名。但我不确定。请说清楚。

1 个答案:

答案 0 :(得分:14)

首先,sendcall是两种截然不同的方法。

在ruby中,面向对象的概念源于Smalltalk。基本上,当您调用方法时,您发送该对象消息。因此,当您想要动态调用对象上的方法时,您调用的方法是send。这种方法至少存在于红宝石中1.8.7。

在红宝石中,我们也有“块”的概念。块是附加到方法调用结束的do...end个东西。块传统上可以yield到;或者,完全可以从块(Proc)中创建一个对象,然后传递它。为了执行该块,您可以在块上调用call

从未在call上定义

Object,而在所有内容上都定义了send

(注意:由于某种原因,call似乎没有2.3.0文档中的文档;但是,它仍然存在并且在2.2.0中做同样的事情,所以我链接了而是那个。)