我有一个带有一些方法的课
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。
答案 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
。当你想动态调用一个方法时,你必须使用它。