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 初心者です。

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 に答える