-2

我们都知道在 ruby​​ 中的 . 运算符左侧有一个对象,.有助于发送消息(右侧.)。

有了上面这个原理"100".to_s,我们可以说操作员正在向对象.发送消息。好一个!to_s100

那么puts("hello")呢?以下是我向当地红宝石专家提出的问题:

  1. 在哪里。操作员?

  2. 谁是这里的接收者?

4

2 回答 2

8

在这种情况下 Receiver 是隐式的selfputs是一种方法Kernel。所有类都包含内核模块,因此所有对象都有一个puts方法。唯一的事情是:它是私人的。私有方法只能通过隐式self(或使用send)调用

puts 'foo' # >> foo
1.puts 'bar' # ~> -:3:in `<main>': private method `puts' called for 1:Fixnum (NoMethodError)


1.send :puts, 'bar' # >> bar
于 2013-02-10T14:36:52.127 回答
2

接收者被省略,并且self在那个上下文中。因此,.也省略了。puts是 on 的一个方法Kernel,无论接收者是什么,它都可以访问,puts因为Kernel它包含在任何具有实例的类中。

于 2013-02-10T14:35:06.610 回答