For the life of me I can figure out why the setter below returns "v" and
not nil
class A
def initialize(id)
@id = id
end
def id
@id
end
def id=(v)
nil
end
end
a = A.new(1)
a.id = 2
=> 2
Any idea?
TIA,
ves
···
--
Posted via http://www.ruby-forum.com/.
That's just the way setters work in Ruby. Any method ending in = will
return what you pass to it.
That way, it's analogous to setting regular variables, like x = y = z.
On a similar note, though you "configure" the class method .new with
the instance method #initialize, you can't make .new return something
other than an instance of the class just by the return value of
#initialize.
···
On Nov 26, 10:43 am, Ves Pasian <keepitsimple...@yahoo.com> wrote:
For the life of me I can figure out why the setter below returns "v" and
not nil
class A
def initialize(id)
@id = id
end
def id
@id
end
def id=(v)
nil
end
end
a = A.new(1)
a.id = 2
=> 2
--
-yossef
Yossef Mendelssohn wrote:
On a similar note, though you "configure" the class method .new with
the instance method #initialize, you can't make .new return something
other than an instance of the class just by the return value of
#initialize.
That's not really similar. The only connection between new and initialize is
that new calls initialize. There is no rule that a method that calls another
method should return the return value of that method (given that new calls
two methods, that'd be impossible anyway). So new returning the newly created
object even though it calls initialize is perfectly ordinary. The behaviour
of setters, however, is a special case.
···
--
NP: Sentenced - My Slowing Heart
Jabber: sepp2k@jabber.org
ICQ: 205544826
Good point and clarification. It just seems similar to me because
normal usage involves defining #initialize and calling .new, but it's
as you say -- one method calls the other and doesn't use that return
value.
···
On Nov 26, 10:59 am, Sebastian Hungerecker <sep...@googlemail.com> wrote:
That's not really similar. The only connection between new and initialize is
that new calls initialize. There is no rule that a method that calls another
method should return the return value of that method (given that new calls
two methods, that'd be impossible anyway). So new returning the newly created
object even though it calls initialize is perfectly ordinary. The behaviour
of setters, however, is a special case.
--
-yossef