[#5218] Ruby Book Eng tl, ch1 question — Jon Babcock <jon@...>

13 messages 2000/10/02

[#5404] Object.foo, setters and so on — "Hal E. Fulton" <hal9000@...>

OK, here is what I think I know.

14 messages 2000/10/11

[#5425] Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — Jon Babcock <jon@...>

18 messages 2000/10/11
[#5427] RE: Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — OZAWA -Crouton- Sakuro <crouton@...> 2000/10/11

At Thu, 12 Oct 2000 03:49:46 +0900,

[#5429] Re: Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — Jon Babcock <jon@...> 2000/10/11

Thanks for the input.

[#5432] Re: Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — Yasushi Shoji <yashi@...> 2000/10/11

At Thu, 12 Oct 2000 04:53:41 +0900,

[#5516] Re: Some newbye question — ts <decoux@...>

>>>>> "D" == Davide Marchignoli <marchign@di.unipi.it> writes:

80 messages 2000/10/13
[#5531] Re: Some newbye question — matz@... (Yukihiro Matsumoto) 2000/10/14

Hi,

[#5544] Re: Some newbye question — Davide Marchignoli <marchign@...> 2000/10/15

On Sat, 14 Oct 2000, Yukihiro Matsumoto wrote:

[#5576] Re: local variables (nested, in-block, parameters, etc.) — Dave Thomas <Dave@...> 2000/10/16

matz@zetabits.com (Yukihiro Matsumoto) writes:

[#5617] Re: local variables (nested, in-block, parameters, etc.) — "Brian F. Feldman" <green@...> 2000/10/16

Dave Thomas <Dave@thomases.com> wrote:

[#5705] Dynamic languages, SWOT ? — Hugh Sasse Staff Elec Eng <hgs@...>

There has been discussion on this list/group from time to time about

16 messages 2000/10/20
[#5712] Re: Dynamic languages, SWOT ? — Charles Hixson <charleshixsn@...> 2000/10/20

Hugh Sasse Staff Elec Eng wrote:

[#5882] [RFC] Towards a new synchronisation primitive — hipster <hipster@...4all.nl>

Hello fellow rubyists,

21 messages 2000/10/26

[ruby-talk:5355] Re: Object method scope

From: Dave Thomas <Dave@...>
Date: 2000-10-09 21:24:52 UTC
List: ruby-talk #5355
"Morris, Chris" <ChrisM@SNELLINGCORP.COM> writes:

> My question then is this: why are methods that belong to Object
> private when prefixed with Self? I don't get this.

Hi Chris:

I'm coming into this thread late, so I'm probably missing the point,
but it's kind of the other way around.

A public or protected method can be called by sending a message to a
receiver:

    fred.doSomething

The pseudo variable 'self' represents the current object, and so it a
valid receiver. If you don't specify a receiver when invoking a
method, Ruby sends the message to self.


   class Dave
     def method1
       puts "m1"
     end
     def method2
       method1()          # these two are
       self.method1()     # the same
     end
   end

   Dave.new.method2

Private methods may not be called with an explicit receiver: they are
always called with 'self'. This enforces privacy: they have to be
called within the context of the current object.

At the top level, methods are added to Object. However, they are added 
as private methods. This means that they may not be called with a
receiver: they always have a receiver of 'self'. Partly this is a
practical thing: these methods are probably intended to be called as
functions, and so adding a receiver would be silly. Putting them in
Object also makes them global, so they're available
everywhere. Finally, stopping them from being called with a receiver
stops you doing strange things by mistake. For example, if we override 
Ruby and make a top level method public, we can do some weird things:

  def wombat
    puts "Marsupials rule!"
  end

  public :wombat

  wombat               # normal call
  self.wombat          # logically same as above
  25.wombat            # call wombat with an arbitrary receiver


  def sneaky
    puts @private
  end

  public :sneaky

  class Dave
    def initialize
      @private = 123
    end
  end

  d = Dave.new
  d.sneaky     # -> 123


So, having these methods private basically makes their use more
intuitive. However, Ruby being Ruby, you can always override the
default. Enough rope to shoot yourself in the foot ;-)


See you Wednesday?


Dave


In This Thread