在红宝石中调用"put"的混乱

aru*_*roy -2 ruby

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

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

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

  1. 在哪里.运营商?

  2. 谁是接收者?

Ser*_*sev 8

在这种情况下,接收者是隐含的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
Run Code Online (Sandbox Code Playgroud)