class MyClass
attr_reader :value
def value=(val)
@value = val.to_s
end
end
Why the the following code return the value passed and not the value
assigned?
c = MyClass.new
result = c.value = 2
puts result
puts c.value
This is currently outputing
2
"2"
The results are the same when MyClass is modified to be this.
class MyClass
attr_reader :value
def value=(val)
@value = val.to_s
return @value
end
end
Shouldn't the result of the 'value=' method be the return value?
Setters always return the value they were originally assigned
--
Tony Arcieri
Medioh! A Kudelski Brand
In message "Re: result of assignment is not the return value"
on Fri, 12 Mar 2010 08:55:25 +0900, Nathan Beyer <nbe...@gmail.com> writes:
|Shouldn't the result of the 'value=' method be the return value?
It's a design choice. We defined the value of the assignment as the
value of the right hand expression, not the return value from the
assigning method.
matz.
Ahh. Thanks. I figured it was something like that, but I couldn't find
any concrete reference to it.
>
>
I have thought about this for awhile. One rationalization is this.
Think of "stacked assignment" which Ruby borrows from C.
x = y = 5
An accessor acts much like a simple assignment:
x = foo.bar = 5 # same as: x = (foo.bar = 5)
In this case, it would be weird if x ended up being anything
other than 5.
Hal