Forum: Ruby Private methods and self:

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
171ea139761951336b844e708d1547ab?d=identicon&s=25 James Byrne (byrnejb)
on 2006-02-23 22:14
FOR ruby 1.8.4 (2005-12-24) [i386-linux]:

#--------------------------------------------------------------------------
def foo1
  self.bar
end

def foo2
  bar
end

def bar
  puts "In bar"
end

private :bar

if __FILE__ == $0

foo2  -> 'In bar'
foo1  -> 'NoMethodError: private method `bar' called for main:Object'

#--------------------------------------------------------------------------

Why the difference in treatment between the explict self reciever and
the implict self receiver?

Regards,
Jim
D111305c32e46f7dd2794a956208d347?d=identicon&s=25 E. Saynatkari (Guest)
on 2006-02-23 23:24
James Byrne wrote:
>
> FOR ruby 1.8.4 (2005-12-24) [i386-linux]:
>
> #--------------------------------------------------------------------------
> def foo1
>   self.bar
> end
>
> def foo2
>   bar
> end
>
> def bar
>   puts "In bar"
> end
>
> private :bar
>
> if __FILE__ == $0
>
> foo2  -> 'In bar'
> foo1  -> 'NoMethodError: private method `bar' called for main:Object'
>
> #--------------------------------------------------------------------------
>
> Why the difference in treatment between the explict self reciever and
> the implict self receiver?

Private methods are not allowed to have an explicit receiver
(using the 'self' there is like going out of the object and
then sending the message). The only exception to this rule
are writer methods (def foo=(); ...; end) because without
the self., foo = x is always interpreted as an assignment
to a local variable.

> Regards,
> Jim


E
171ea139761951336b844e708d1547ab?d=identicon&s=25 James Byrne (byrnejb)
on 2006-02-23 23:37
E. Saynatkari wrote:

>
> Private methods are not allowed to have an explicit receiver
> (using the 'self' there is like going out of the object and
> then sending the message). The only exception to this rule
> are writer methods (def foo=(); ...; end) because without
> the self., foo = x is always interpreted as an assignment
> to a local variable.
>
> E

Curious that this restriction does not appear to be mentioned in the
Pickaxe book.  It also seems, to me, somewhat counter-intuitive.  Is it
purposeful behaviour or an artifact of a stylistic convention?

Regards,
Jim
37a3c73ffbf864e4b28f7f2384ee12ce?d=identicon&s=25 Timothy Hunter (tim-hunter)
on 2006-02-24 00:20
(Received via mailing list)
James Byrne wrote:
>>E
>
>
> Curious that this restriction does not appear to be mentioned in the
> Pickaxe book.  It also seems, to me, somewhat counter-intuitive.  Is it
> purposeful behaviour or an artifact of a stylistic convention?
>
> Regards,
> Jim
>

Page 35 in the 2nd Edition: "Private methods cannot be called with an
explicit receiverâ??the receiver is always self. This means that private
methods can be called only in the context of the current object; you
canâ??t invoke another objectâ??s private methods."
This topic is locked and can not be replied to.