From: Greg Hauptmann Date: 2008-06-15T22:55:23+09:00 Subject: Re: why can't an instance instantiated within a class method access a protected instance method? ------=_Part_50595_24213508.1213538163925 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline On Sun, Jun 15, 2008 at 11:29 PM, Robert Klemme wrote: > On 15.06.2008 15:17, Greg Hauptmann wrote: > >> Thanks - can I ask: >> > > Guess so. > > (a) what do you mean by "explicit" - just to understand >> > > no_explicit_receiver() > self.has_explicit_receiver() > > (b) is there a way I can adjust my code so that I can leave methods like >> "reconcile_one" private or protected, i.e. not really to be available to >> the >> outside world (except in this case where I'm calling it from with an >> instance of the class really, but it's just the logistics of Ruby that >> isn't >> allowing it to work...if I've understood things correctly) >> > > You can use #send or #instance_eval, e.g. > > irb(main):001:0> class F > irb(main):002:1> protected > irb(main):003:1> def x;1 end > irb(main):004:1> end > => nil > irb(main):005:0> f=F.new > => # > irb(main):006:0> f.x > NoMethodError: protected method `x' called for # > from (irb):6 > from :0 > irb(main):007:0> f.instance_eval { x } > => 1 > irb(main):008:0> f.send :x > => 1 > irb(main):009:0> > > Cheers > > robert > Thanks Robert - do you understand why Ruby allows the "send :x" method to work here, but not the ".x" out of curiosity? Does this make sense to people it should do this? Greg ------=_Part_50595_24213508.1213538163925--