1

我有一堂有一些方法的课

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

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

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。

4

1 回答 1

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我的代码中的使用。当你想动态调用一个方法时,你必须使用它。

于 2013-02-20T14:57:28.260 回答