From: Brian C Broom Date: 2006-12-12T09:06:19+09:00 Subject: Re: private methods in Ruby On Tue, 2006-12-12 at 08:28 +0900, hemant wrote: > ##Won't work method #1 > > class Foobar > private > def foo; p "Foobar"; end > end > > class Baz < Foobar > def blah; foo; end > end > > baz = Baz.new > baz.foo > > ## Work method #2 > > class Foobar > private > def foo; p "Foobar"; end > end > > class Baz < Foobar > def blah; foo; end > end > > baz = Baz.new > baz.blah > > PickAxe2: > > If a method is private, it may be called only within the context of > the calling object—it is never possible to access another object's > private methods directly, even if the object is of the same class as > the caller. > > So what happens in Method#2, why foo can be easily called, when called > from inside the class Baz? I mean, that method foo should be still > bound to instance baz...so in which context foo gets called in > Method#2. > I'll take a stab at this... since the instance/object baz is of class Baz, inherited from Foobar, it has the method foo. When you call baz.blah, baz internally calls its own foo method, which it is allowed to do. the "even if the object is of the same class..." bit is a little confusing, but means that if you (somehow) link baz and baz2 (two different instances) they can't call each others private methods, even though they are the same class. hope that helps Brian Broom