I would like to define two methods in a class
such that they could be called as follows
value = obj.meth1(a,b)
obj.meth2(a,b) = value
I can code the first [accessor] method easily as
def meth1(a,b)
but how do I code the def statement for the second
[setter?] method?
···
--
Posted via http://www.ruby-forum.com/.
It is not possible in ruby to assign to a local variable to the right of an assignment (as written above).
···
On Dec 9, 2010, at 12:57 , Richard Price wrote:
I would like to define two methods in a class
such that they could be called as follows
value = obj.meth1(a,b)
obj.meth2(a,b) = value
I can code the first [accessor] method easily as
def meth1(a,b)
but how do I code the def statement for the second
[setter?] method?
I'm not sure if such a method can be created, but you wouldn't be able
to call it anyway; foo.meth(...) = ... is a syntax error, regardless
of the parameters or right hand side of '='.
An alternative could be to have meth2(a,b) return a container for the
value you're wanting to set, and use:
foo.meth2(a, b).value = value
where .value is a method on the container object returned by meth2.
While () = is a syntax error, you can use [] =, by overloading the
square brackets, if that does what you want.
e.g.
def [](a,b)
# return the value at that index
end
def []=(a,b)
# set the value at that index
end
Then use it like:
foo[:fizz, :buzz]
=> nil
foo[:fizz, :buzz] = 42
=> 42
foo[:fizz, :buzz]
=> 42
Thanks overloading the
square brackets should
do what I want. 
···
--
Posted via http://www.ruby-forum.com/.