Ruby的自我定义

我正在阅读一本Ruby书,并且遇到了伪变量self的定义:

当前方法的自我接收对象

有人可以打破这个定义并解释它的含义吗? 我不明白任何一个。

编辑:我实际上非常清楚自己是什么(及其应用程序),我知道如何在Google上搜索。 我只是想知道是否有人可以解释我引用的定义。 具体而言。

Ruby和其他语言(如Smalltalk和Objective-C)更喜欢术语“消息传递”,而Java和C ++更喜欢“方法调用”。 也就是说,“Java方式”是在对象上调用方法 – 在对象的上下文中运行代码 – 而“Ruby方式”是向对象发送消息,对象通过运行其方法来响应。

Ruby会将my_string.lengthmy_string.length为“发送my_string length消息”。 my_string接收消息,因此称为接收器; 在length方法的定义里面, self会引用my_string 。 您可以使用my_string.send(:length)获得相同的效果。

在消息传递方面考虑这个概念比在方法调用方面思考更灵活。 要在对象上调用方法,该方法必须已预先定义,而您可以向对象发送可以选择动态处理的消息(使用respond_to?method_missing )。 这种灵活性是允许Ruby用作简明域特定语言(DSL)的一个方面。

self是一个特殊变量,根据上下文而变化。 更具体地说,正如您所提到的,它是当前方法的接收器对象。 要理解这一点,我们需要了解接收器的含义。

请参阅Ruby编程 : 有关方法和类和对象的更多信息 。

通过指定接收器,方法名称以及可选的一些参数和相关块来调用方法。

 connection.downloadMP3("jitterbug") { |p| showProgress(p) } 

在此示例中,对象connection是接收器, downloadMP3是方法的名称, "jitterbug"是参数,并且大括号之间的东西是关联的块。

 foo = "hello" bar = foo.dup class < 

foo.twoTimesfoo part被称为方法调用的接收者。 因此,在twoTimes方法中, self指的是上下文中的对象foo

这里也有很好的解释

当前方法的自我接收对象

Ruby中的“方法调用”是通过消息发送机制完成的。 所以

 some_object.some_method(args) 

是一个简写

 some_object.send(:some_method, args) 

我认为这就是引用所指的内容:“self”是消息(或方法)被发送到的对象:当前方法的接收者。

整个消息发送的东西是使Ruby如此动态的部分原因。 它使对象很容易为当前没有处理的消息定义method_missing ,并决定如何处理它们。 Rails使用了很多:ActiveRecord,例如具有“find_by …”语法,它从名为/ sent的方法的名称中找出想要的内容。