为什么这不起作用?
module Magic
class Fixnum
def div2(other)
self.to_f / other
end
alias :"/" :div2
end
end
module SomeModule
include Magic
1/4 == 0.25 #should be true in here
end
1/4 == 0.25 #should be false everywhere else
Run Code Online (Sandbox Code Playgroud)
你自己发布的答案实际上是Fixnum全球变化,这不是你想要的.也就是说,使用您的解决方案:
module Magic
class ::Fixnum
def div2(other)
self.to_f / other
end
alias :"/" :div2
end
end
# Yields 0.25 instead of expected 0.
# This line should not be affected by your Fixnum change, but is.
1/4
Run Code Online (Sandbox Code Playgroud)
对于您描述的用例,Ruby 2.0引入了改进,您可以使用如下所示.请注意,using在Ruby 2.0中不能使用另一个模块中的模块,但是在Ruby 2.1中.因此,要使用Magic内部模块,SomeModule您将需要Ruby 2.1.如果您使用Windows,这可能是一个问题,因为您必须自己编译2.1,Windows二进制文件和安装程序仍然是2.0.
module Magic
refine Fixnum do
def /(other)
self.to_f / other
end
end
end
1/4 # => 0
using Magic
1/4 # => 0.25
Run Code Online (Sandbox Code Playgroud)