Monkey Patching Float Infix操作员产生了意想不到的结果

时间:2013-12-10 17:27:16

标签: ruby monkeypatching arithmetic-expressions

重新定义Float#/似乎无效:

class Float
  def /(other)
    "magic!"
  end
 end
 puts 10.0/2.0 # => 5.0

但是当重新定义了另一个中缀运算符Float#*时,Float#/突然采用了新的定义:

class Float
  def /(other)
    "magic!"
  end
  def *(other)
    "spooky"
  end
end
puts 10.0/2.0 # => "magic!"

我很想知道是否有人可以解释这种行为的来源以及其他人是否得到相同的结果。

  • Ruby:ruby 2.0.0p353(2013-11-22)[x64-mingw32]

要快速确认错误,请运行this script

1 个答案:

答案 0 :(得分:3)

这似乎是Ruby实现中的一个错误。已提交错误报告here

同时,您可以切换实现或切换版本。 1.8.7似乎没有错误。

修改

This bug已修复为revision 44127