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
Private methods can’t have a receiver
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:
Since there can be no explicit receiver, you certainly can’t do
b.use_oven. And that is how method privacy is enforced.