在红宝石中调用“put”的混乱

时间:2013-02-10 14:33:07

标签: ruby

我们都知道在红宝石中的事实。将对象留给.的运算符有助于发送消息(右侧为.)。

根据上述原则 - "100".to_s,我们可以说.运算符正在向对象to_s发送消息100。好的!

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

  1. 所在的地方。操作

  2. 谁是这里的接收人?

2 个答案:

答案 0 :(得分:8)

在这种情况下,Receiver是隐式selfputsKernel的一种方法。所有类都包含内核模块,因此所有对象都有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

答案 1 :(得分:2)

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