使用ruby优化时出现NoMethodError

时间:2018-07-15 11:08:04

标签: ruby

我正在使用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。我咨询了documentation,我认为我所做的是正确的,但显然不正确。

1 个答案:

答案 0 :(得分:7)

您要定义一个实例方法,但是要调用一个单例方法。

您需要改为改进Math模块的单例类:

CRON