-1

我正在使用 Ruby 1.9.2。例如我有课:

class Test
  def ==(param)
    # some process
  end

  def bar(param)
    puts "foo bar #{param}"
  end
end

我可以使用以下方法调用bar方法:

Test.new.instance_eval{ bar 'celona' }

但我不能像块一样执行==方法

Test.new.instance_eval{ == "foo" }

我有语法错误,意外的 tEQ

4

2 回答 2

0

以下对我有用:

class Test
  def ==(param)
    p "You put #{param}"
  end
end

Test.new.instance_eval{|a|  a == "foo" }
=> "You put foo"

解决方案实际上取决于您的用例。

编辑实例化类时也是如此。

b = Test.new
b == "foo"
=> "You put foo"

你也可以使用self

Test.new.instance_eval{self == "foo" }

我不完全确定原因,但我猜该==方法需要一个明确的被调用者并且它无法推断self

于 2012-04-27T09:26:55.810 回答
0

你可以试试 :

Test.new.send("==", "foo")
于 2012-04-27T09:27:12.260 回答