加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 21:21:05 所属栏目:百科 来源:网络整理
导读:在 Ruby中,我的理解是self是任何裸方法调用的隐含接收器.然而: ~: irb puts "foo"foo= nil self.puts "foo"NoMethodError: private method `puts' called for main:Object 这解释了什么? 万一有任何帮助: method(:puts).owner= Kernel 解决方法 私有方法
在 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.这就是方法隐私的实施方式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读