如果`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.这就是方法隐私的实施方式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |