在Ruby中,"接收者"指的是什么?

lor*_*orz 22 ruby terminology

我正在阅读一篇谈论有接收器的方法的文档.什么是接收器?

Cam*_*ope 22

在Ruby(以及从SmallTalk中获取灵感的其他语言)中,对象被认为是发送和接收"消息".

在Ruby中,Object是一切的基类,有一个send方法:Object.send例如:

class Klass
  def hello
    "Hello!"
  end
end
k = Klass.new
k.send :hello   #=> "Hello"
k.hello         #=> "Hello"
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,k是接收器的"你好"的消息.

  • 你说k是接收者.那么我们为什么要说"k.send:hello"而不是"k.receive:hello"?*听起来*就像k是发送者而不是接收者. (3认同)
  • 因为您正在发送 TO k,但没有接收 TO k。后一种选择毫无意义。;) (2认同)

Ada*_*ght 8

在最初的Smalltalk术语中,"对象"上的方法被称为对象的消息(即,您没有在对象foo上调用方法,而是向对象foo发送消息).所以foo.blah正在发送"blah"消息,"foo"对象正在接收该消息; "foo"是"blah"的接收者.


chi*_*tom 6

之前的对象.

想到把方法xy称为"将指令y发送到对象x".

这是一种小巧的思维方式,当您获得Ruby的一些更高级功能时,它将为您提供良好的服务.