【发布时间】:2009-05-27 15:59:28
【问题描述】:
我正在阅读一个文档,其中讨论了具有接收器的方法。什么是接收器?
【问题讨论】:
-
我曾经怀疑这是不是受美式足球启发的术语。
-
我从 ruby 得到的新想法是,OO 编程就像一种消息传递。
标签: ruby terminology
我正在阅读一个文档,其中讨论了具有接收器的方法。什么是接收器?
【问题讨论】:
标签: ruby terminology
在 Ruby(以及其他从 SmallTalk 中获得灵感的语言)中,对象被认为是发送和接收“消息”。
在 Ruby 中,万物的基类 Object 有一个发送方法:Object.send 例如:
class Klass
def hello
"Hello!"
end
end
k = Klass.new
k.send :hello #=> "Hello!"
k.hello #=> "Hello!"
在这两种情况下,k 都是“hello”消息的接收者。
【讨论】:
class Hello; def self.say; puts "hello"; end; end 而言,当您调用Hello.say 时,接收者是什么? Hello 也是对象吗?
Hello 确实是一个对象。如果您执行Hello.class,则将返回Class。因此Hello 实际上是Class 类的一个实例。
在最初的 Smalltalk 术语中,“对象”上的方法被称为对象的消息(即,您没有调用对象 foo 上的方法,而是向对象 foo 发送了消息)。所以 foo.blah 正在发送“foo”对象正在接收的“blah”消息; “foo”是“blah”的接收者。
【讨论】:
. 之前的对象。
将调用方法 x.y 想象为“向对象 x 发送指令 y”。
这是一种 smalltalk 的思维方式,它会在您了解 Ruby 的一些更高级的功能时为您服务。
【讨论】: