0

クラスの固有クラスを開いてメソッドを動的に未定義にしようとしています。私は次のようなものが欲しい:

def remove_defined_mock_name_method(name)
  if Settings.respond_to?(name)
    class << Settings
      remove_method name
    end
  end
end

「name」は記号です。問題は、再開されたクラスで名前を使用できないことです。メソッド呼び出しを介して、このようにクラスメソッドを動的に未定義にするにはどうすればよいですか?

好奇心旺盛な人のために説明すると、使用例は、Rails の rspec で各テストの後に動的に定義されたメソッドを未定義にしたいということです。

4

1 に答える 1

1

nameローカル変数です。ローカル変数は、定義されているスコープに対してローカルであるため、ローカル変数と呼ばれます。ネストされたスコープを作成する Ruby の唯一の構成要素はブロックです。そのため、にアクセスしたい場合はブロックを使用する必要がありますname。つまり、class_evalまたはそのようなものを使用します。

ただし、この場合、それは必要ありません。

def remove_defined_mock_name_method(name)
  Settings.singleton_class.send(:remove_method, name) if Settings.respond_to?(name)
end
于 2012-08-25T13:12:12.517 に答える