使用ruby细化时的NoMethodError

Jac*_*ken 3 ruby

我正在使用ruby的改进来将一个方法修改为Math类,如下所示:

module Radians
  refine Math do
    def radians(degrees)
      degrees * Math::PI / 180
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

然后我尝试在类中调用我的猴子修补方法:

class Foo
  using Radians
  def bar
    Math.radians(180)
  end
end

Foo.new.bar
Run Code Online (Sandbox Code Playgroud)

这引发了 undefined method `radians' for Math:Module (NoMethodError)

我究竟做错了什么?我的红宝石版本是2.5.1p57.我已经查阅了文档,我认为我所做的是正确的,但显然不是.

mat*_*ewd 7

您正在定义实例方法,但调用单例方法.

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

module Radians
  refine Math.singleton_class do
    def radians(degrees)
      degrees * Math::PI / 180
    end
  end
end
Run Code Online (Sandbox Code Playgroud)