What does this entry in the FAQ mean?

Hal

> 4.8 I can't get def pos=(val) to work.
>
> I have the following code, but I cannot use the method pos = 1.
>
>     def pos=(val)
>  print @pos, "\n"
>    @pos = val
> d
>
> Methods with = appended must be called with a receiver (without the
receiver, you're just assigning to a local variable).
> Invoke it as self.pos = 1.




----- Original Message -----
From: Yasushi Shoji <yashi / yashi.com>
To: ruby-talk ML <ruby-talk / netlab.co.jp>
Sent: Tuesday, October 10, 2000 8:07 PM
Subject: [ruby-talk:5406] Re: Object.foo, setters and so on


> At Wed, 11 Oct 2000 11:37:25 +0900,
> Hal E. Fulton <hal9000 / hypermetrics.com> wrote:
> >
> > OK, here is what I think I know.
> >
> > These three fragements differ only in that the last one defines a
> > private method, no?
>
> nop
>
> > class Object
> >   def foo
> >     ...
> >   end
> > end
>
> you defined public method 'foo' in class Object
>
> you call it:
> Object.new.foo
>
> > def foo
> >   ...
> > end
>
> you defined private method 'foo' in class Object
>
> you call it
> foo # no receiver.
>
> > def Object.foo
> >   ...
> > end
>
> you defined singleton method for class Object
>
> you call it
> Object.foo
>
> > And isn't it true that a method like bar= must be called with a
receiver?
>
> nop.
>
> > Then why won't this work?
>
> so that's just the way it is.
>
> > def bar=
> >   ...
> > end
> >
> > self.bar = 5
>
> however, i don't know why the following doesn't work :(
>
> def bar=(value)
>   p value
> end
>
> bar = 5
>
> > It tells me that bar is private. Why?
>
> because you defined private method :) this thing came up on -talk a
> few days ago, no?
>
> > [2  <text/html; iso-8859-1 (quoted-printable)>]
>
> and you can keep your the html file.
>
> hope it helps
> --
>             yashi
>
>