Dumb question about assigments

A

Andrew Huh?

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
 
T

Tim Pease

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

BlahBlah.new.something = 1
BlahBlah.new.something = 1, 2

#=> 1
#=> nil

#=> 1
#=> 2

In the first assignment, y gets the value of nil.

Hope this helps :)

TwP
 
A

Andrew Huh?

Tim said:
Ruby only allows a single value to be assigned using the = operator.
However, you can assign an array to multiple values: [..]
Hope this helps :)

TwP

Yep, that certainly helped, I should smack the programmer in the head
then?, perhaps he placed the = by accident.
Thanks!
 
P

Patrick Hurley

I came across a attribute defined like:
class BlahBlah
def something=(x,y)
#code
end
end

How can I assign values to this tipe of attribute?
thanks

Well this is pretty questionable code, but if you need to call it try:

b = BlahBlah.new
b.send :something=, x, y

Good luck
pth
 
F

Florian Frank

Andrew said:
I tried to assign the values as:
BlahBlah.something=(5,10)
and
BlahBlah.something=5,10
and
BlahBlah.something(5,10)
blah = BlahBlah.new
blah.__send__:)something=, 5, 10)

Though it's likely a dumb idea to define =-methods in this way.
 
M

Morton Goldberg

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.

Regards, Morton
 
A

Andrew Huh?

Morton said:
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.
 
F

F. Senault

Le 24 juillet 2006 à 18:36, Florian Frank a écrit :
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).

Fred
 
N

nobu

Hi,

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.
 
F

F. Senault

Le 25 juillet 2006 à 09:34, (e-mail address removed) a écrit :
Hi,

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,011
Latest member
AjaUqq1950

Latest Threads

Top