我们都知道在 ruby 中的 . 运算符左侧有一个对象,.
有助于发送消息(右侧.
)。
有了上面这个原理"100".to_s
,我们可以说操作员正在向对象.
发送消息。好一个!to_s
100
那么puts("hello")
呢?以下是我向当地红宝石专家提出的问题:
在哪里。操作员?
谁是这里的接收者?
我们都知道在 ruby 中的 . 运算符左侧有一个对象,.
有助于发送消息(右侧.
)。
有了上面这个原理"100".to_s
,我们可以说操作员正在向对象.
发送消息。好一个!to_s
100
那么puts("hello")
呢?以下是我向当地红宝石专家提出的问题:
在哪里。操作员?
谁是这里的接收者?
在这种情况下 Receiver 是隐式的self
。puts
是一种方法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
接收者被省略,并且self
在那个上下文中。因此,.
也省略了。puts
是 on 的一个方法Kernel
,无论接收者是什么,它都可以访问,puts
因为Kernel
它包含在任何具有实例的类中。