在
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.这就是方法隐私的实施方式.