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
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
On Nov 26, 10:43 am, Ves P. [email protected] wrote:
end
def id=(v)
nil
end
enda = A.new(1)
a.id = 2
=> 2
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.
Yossef M. 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.
On Nov 26, 10:59 am, Sebastian H. [email protected]
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.
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.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs