ruby - 使用 ruby 改进时的 NoMethodError
问题描述
我正在使用 ruby 的改进将一个方法猴子修补到 Math 类中,如下所示:
module Radians
refine Math do
def radians(degrees)
degrees * Math::PI / 180
end
end
end
然后我尝试在这样的类中调用我的猴子补丁方法:
class Foo
using Radians
def bar
Math.radians(180)
end
end
Foo.new.bar
这会抛出一个undefined method `radians' for Math:Module (NoMethodError)
我究竟做错了什么?我的红宝石版本是2.5.1p57
. 我查阅了文档,我认为我所做的是正确的,但显然不是。
解决方案
您正在定义一个实例方法,但调用一个单例方法。
您需要改进 Math 模块的单例类:
module Radians
refine Math.singleton_class do
def radians(degrees)
degrees * Math::PI / 180
end
end
end