In Ruby, my understanding is that self
is the implied receiver for any bare method call. However:
~: irb
>> puts "foo"
foo
=> nil
>> self.puts "foo"
NoMethodError: private method `puts' called for main:Object
What explains this?
In case it's any help:
>> method(:puts).owner
=> Kernel
I think the answer is this: Ruby's way of enforcing method privacy is that it doesn't allow calling private methods with an explicit receiver.
An example:
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
Since there can be no explicit receiver, you certainly can't do b.use_oven
. And that is how method privacy is enforced.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With