如何使用参数传递的名称调用方法?

时间:2013-02-20 14:50:40

标签: ruby testing

我有一个带有一些方法的课

class Test
  def add(a,b)
    a+b
  end
  ...
end

如果定义了Class和Method,我想动态测试并断言该方法。 这是代码和问题=(

def methodInsideDefined?(className, methodName, param1, param2, result)
  if(className.is_a?(Class) && className.method_defined?(:methodName))
    className.new.methodName(param1,param2).eql?(result)
  end
end

所以,如果我打电话:

methodInsideDefined?(Test, add, 1, 2, 3)

我应该得到一个真正的价值,但我得到了一个:

NameError: undefined local variable or method ‘add’ for main:Object    

请以静态方式忽略参数号,稍后我将获得动态参数数量,但如果您有一个具有动态参数数量的解决方案,请告诉我。 = d

是的,我是Ruby noobie。

1 个答案:

答案 0 :(得分:1)

尝试:

methodInsideDefined?(Test, :add, 1, 2, 3)

在您当前的代码中,您将不存在的变量 add传递给您的函数。如果您将符号:add传递给函数,而不是变量,它确实有效。

在你的功能定义中,它是另一种方式。你在那里使用符号而不是变量。它应该是:

def methodInsideDefined?(className, methodName, param1, param2, result)
  if className.is_a?(Class) && className.method_defined?(methodName)
    className.new.send(methodName,param1,param2).eql?(result)
  end
end

另请注意在我的代码中使用send。当你想动态调用一个方法时,你必须使用它。

相关问题