【问题标题】:In Ruby what does the "receiver" refer to?在 Ruby 中,“接收者”指的是什么?
【发布时间】:2009-05-27 15:59:28
【问题描述】:

我正在阅读一个文档,其中讨论了具有接收器的方法。什么是接收器?

【问题讨论】:

  • 我曾经怀疑这是不是受美式足球启发的术语。
  • 我从 ruby​​ 得到的新想法是,OO 编程就像一种消息传递。

标签: ruby terminology


【解决方案1】:

在 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”消息的接收者

【讨论】:

  • “k.send :hello”实际上是在 Ruby 中调用“k.hello”的一种在语法上有效的方式吗?
  • 你说k是接收者。那么为什么我们说“k.send :hello”而不是“k.receive :hello”呢? 听起来 k 是发送者而不是接收者。
  • 因为您发送的是 TO k,而不是接收 TO k。后一种选择没有多大意义。 ;)
  • 我想知道,因为在 Ruby 中,每件事都是一个对象,每个函数都是一些方法。但是就类方法class Hello; def self.say; puts "hello"; end; end 而言,当您调用Hello.say 时,接收者是什么? Hello 也是对象吗?
  • 是的。 Hello 确实是一个对象。如果您执行Hello.class,则将返回Class。因此Hello 实际上是Class 类的一个实例。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    . 之前的对象。

    将调用方法 x.y 想象为“向对象 x 发送指令 y”。

    这是一种 smalltalk 的思维方式,它会在您了解 Ruby 的一些更高级的功能时为您服务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-03
      相关资源
      最近更新 更多