Well I found the explanation, private methods can't be called with an explicit receiver even if it is self:<br><br><a href="http://weblog.jamisbuck.org/2007/2/23/method-visibility-in-ruby">http://weblog.jamisbuck.org/2007/2/23/method-visibility-in-ruby</a><br>
<br>I sometimes like to explicitly write self as it helps readability, but in this case it breaks the sematics of the language.<br><br><div class="gmail_quote">2009/1/26 Kenneth Lee <span dir="ltr"><<a href="mailto:kenfodder@gmail.com">kenfodder@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">



<div bgcolor="#ffffff" text="#000000">
<font size="-1"><font face="Arial">I've used Ruby for 3 years now and
this just confused me suddenly about private methods:<br>
<br>
class Foo<br>
  <br>
  def hello<br>
    self.p()<br>
  end<br>
  <br>
  private<br>
  <br>
    def p<br>
      puts 'world'<br>
    end<br>
end<br>
<br>
a = Foo.new<br>
a.hello<br>
<br>
This throws an exception which I'm not expecting!<br>
foo.rb:4:in `hello': private method `p' called for #<Foo:0x2911c>
(NoMethodError)<br>
    from foo.rb:15<br>
<br>
However if I remove the "self." so the "self." is implied it works! I'm
I going mad?<br>
<br>
</font></font><font size="-1"><font face="Arial">class Foo<br>
  <br>
  def hello<br>
    p()<br>
  end<br>
  <br>
  private<br>
  <br>
    def p<br>
      puts 'world'<br>
    end<br>
end<br>
<br>
a = Foo.new<br>
a.hello<br>
<br>
My version of ruby is: ruby 1.8.6 (2008-03-03 patchlevel 114)
[universal-darwin9.0]<br>
<br>
</font></font>
</div>

</blockquote></div><br>