[LRUG] Private methods
Kenneth Lee
kenfodder at gmail.com
Mon Jan 26 15:00:51 PST 2009
Well I found the explanation, private methods can't be called with an
explicit receiver even if it is self:
http://weblog.jamisbuck.org/2007/2/23/method-visibility-in-ruby
I sometimes like to explicitly write self as it helps readability, but in
this case it breaks the sematics of the language.
2009/1/26 Kenneth Lee <kenfodder at gmail.com>
> I've used Ruby for 3 years now and this just confused me suddenly about
> private methods:
>
> class Foo
>
> def hello
> self.p()
> end
>
> private
>
> def p
> puts 'world'
> end
> end
>
> a = Foo.new
> a.hello
>
> This throws an exception which I'm not expecting!
> foo.rb:4:in `hello': private method `p' called for #<Foo:0x2911c>
> (NoMethodError)
> from foo.rb:15
>
> However if I remove the "self." so the "self." is implied it works! I'm I
> going mad?
>
> class Foo
>
> def hello
> p()
> end
>
> private
>
> def p
> puts 'world'
> end
> end
>
> a = Foo.new
> a.hello
>
> My version of ruby is: ruby 1.8.6 (2008-03-03 patchlevel 114)
> [universal-darwin9.0]
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lrug.org/pipermail/chat-lrug.org/attachments/20090126/04d9f2c5/attachment-0003.html>
More information about the Chat
mailing list