来自块的Ruby运算符重载方法

时间:2012-04-27 09:23:42

标签: ruby-on-rails ruby metaprogramming dsl

我正在使用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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以尝试:

Test.new.send("==", "foo")