If `self` is always the implied receiver in Ruby, why doesn't `self.puts` work?
ruby
Solution
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:
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.
Problem
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 ```