Sending Multiple Args to a Method Object

I am trying to call a method that has multiple arguments using
reflection. However, when I invoke the method.call method passing the
arguments as an array it chokes with the following error:

ArgumentError (wrong number of arguments (1 for 4))

The ruby interpreter thinks that my single array is the parameter I am
passing in; however, the array I am passing in contains 4 object that
map directly to the 4 arguments the interpreter is looking for. Is
there another way to accomplish this other than using method.call? Or
am I using method.call incorrectly?

What is making this more difficult is the fact that the call I am making
is completely dynamic so just calling:

method_object.call arg1, arg2, arg3, arg4

is not an option.

thanks for any tips,

~harris

Harris R. wrote:

is not an option.

thanks for any tips,

Try:

method_object.call(*args)

with args being the name of your argument array.

Jamey

On 8/2/06, Harris R. [email protected] wrote:

The ruby interpreter thinks that my single array is the parameter I am passing in; however, the array I am passing in contains 4 object that map directly to the 4 arguments the interpreter is looking for. Is there another way to accomplish this other than using method.call? Or am I using method.call incorrectly?

Put a * before the array argument, it’ll make Ruby expand it to fit
the arguments, eg:

def test(one, two, three, four)
puts “#{one} #{two} #{three} #{four}”
end

args = [1, 2, 3, 4]
m = method(:test)
m.call(*args)

Phillip H. wrote:

def test(one, two, three, four)
puts “#{one} #{two} #{three} #{four}”
end

args = [1, 2, 3, 4]
m = method(:test)
m.call(*args)

Note that you do not need to use Method#call to do this, it works for
all methods (since the OP was asking if he had to use it).

The above could have been (just for clarification):

def test(one, two, three, four)
puts “#{one} #{two} #{three} #{four}”
end

test(*[1, 2, 3, 4])

or

args = [1,2,3,4]
test(*args)

-Justin

On Aug 1, 2006, at 4:04 PM, Harris R. wrote:

using method.call?
method.call(*[arg1, arg2, arg3, arg4])


Eric H. - [email protected] - http://blog.segment7.net
This implementation is HODEL-HASH-9600 compliant

http://trackmap.robotcoop.com

Justin C. wrote:

Or maybe he wasn’t. Either way.

-Justin