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

前端之家收集整理的这篇文章主要介绍了如果`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

解决方法

私有方法不能有接收器

我认为答案是这样的: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.这就是方法隐私的实施方式.

原文链接:/ruby/267586.html

猜你在找的Ruby相关文章