如果`self`总是Ruby中隐含的接收者,为什么`self.puts`不起作用?

Ruby中,我的理解是self是任何裸方法调用的隐含接收器.然而:
~: irb
>> puts "foo"
foo
=> nil
>> self.puts "foo"
NoMethodError: private method `puts' called for main:Object

这解释了什么?

万一有任何帮助:

>> method(:puts).owner
=> Kernel

@R_502_5620@

私有方法不能有接收器

我认为答案是这样的:Ruby实施方法隐私的方式是它不允许使用显式接收器调用私有方法.

一个例子:

class Baker
  def bake_cake
    make_batter
    self.use_oven # will explode: called with explicit receiver 'self'
  end

  private
  def make_batter
    puts "making batter!"
  end

  def use_oven
    puts "using oven!"
  end

end

b = Baker.new
b.bake_cake

由于没有明确的接收器,你当然不能做b.use_oven.这就是方法隐私的实施方式.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...