Hi, I feel kind of dumb for asking this, but I can’t honestly find the
answer anywere.
I came across a attribute defined like:
class BlahBlah
def something=(x,y) #code
end
end
I tried to assign the values as:
BlahBlah.something=(5,10)
and
BlahBlah.something=5,10
and
BlahBlah.something(5,10)
but all give me a “1 for 2” argument error (except for the last which
don’t work because something is not a method).
All examples I came across either used only one argument, or defined
something as a method (strip the =).
How can I assign values to this tipe of attribute?
thanks
Ruby only allows a single value to be assigned using the = operator.
However, you can assign an array to multiple values:
a, b = [1, 2]
puts a #=> 1
puts b #=> 2
When you try to assign multiple values using the = operator you
defined, Ruby is converting the arguments on the right hand side into
an array; hence the “1 for 2” argument error you mentioned. I would
try something like this
class BlahBlah
def something=( *args )
x, y = args
puts x
puts y
end
end
That is very strange code you’ve posted. I wonder what the original
author intended? The only way I could get a two-argument writer
method to run was as follows:
#! /usr/bin/ruby -w
class M
attr_reader :m
def initialize
@m = [0, 0]
end
def m=(x, y)
@m = [x, y]
end
end
foo = M.new
p foo.m => [0, 0]
foo.send(:m=, 1, 2)
p foo.m => [1, 2]
------- end of code --------
The above proves that a two-argument writer can be called (sort of),
but it really doesn’t cast any light on what it would be used for. I
hope some wiser head will clarify this.
The above proves that a two-argument writer can be called (sort of),
but it really doesn’t cast any light on what it would be used for. I
hope some wiser head will clarify this.
Regards, Morton
Now that I know this is not common (I don’t have much real life
experience with ruby), I’m sure he placed the = by accident.
Though it’s likely a dumb idea to define =-methods in this way.
Mind you, in some languages (well, at least - don’t shoot ! - Visual
Basic), it allows to type (the equivalent of) blah.something(10) = 5
(first argument is the value assigned, the others passed in the
partenthesis).
At Tue, 25 Jul 2006 09:20:05 +0900,
F. Senault wrote in [ruby-talk:203659]:
Mind you, in some languages (well, at least - don’t shoot ! - Visual
Basic), it allows to type (the equivalent of) blah.something(10) = 5
(first argument is the value assigned, the others passed in the
partenthesis).
At Tue, 25 Jul 2006 09:20:05 +0900,
F. Senault wrote in [ruby-talk:203659]:
Mind you, in some languages (well, at least - don’t shoot ! - Visual
Basic), it allows to type (the equivalent of) blah.something(10) = 5
(first argument is the value assigned, the others passed in the
partenthesis).
It’s tough for ruby parser.
Sure, ruby already has plenty of constructs for this purpose. I was
just pointing a possible origin of the idiom.
Fred
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.