gpt4 book ai didi

ruby - 向 Ruby 类添加的方法在 MiniTest 中抛出 NoMethodError

转载 作者:行者123 更新时间:2023-12-04 17:03:06 25 4
gpt4 key购买 nike

那么为什么会发生这种情况呢?它必须是命名空间错误,我只是不明白它在哪里。我在文件 file.rb 中像这样向 Fixnum 添加了一个方法

module M
class Fixnum
def foo
return true
end
end
end

然后我会做一个这样的测试:
require 'minitest/autorun'
require './file.rb' #the path is correct

class SomeTest < MiniTest::Test
def test_foo
assert 3.foo
end
end

这将反过来抛出一个
NoMethodError: undefined method `foo' for 3:Fixnum

当我运行测试时,即使我 include M 也让我摸不着头脑。包含模块(应用命名空间?)进行测试它仍然会引发错误。我可以很好地使用自定义类,只有当我尝试将方法添加到现有的“开放类”时。

最佳答案

是的,您已经定义了自己的 M::Fixnum实际上与::Fixnum无关的类在全局命名空间中。以下将解决一个问题:

module M
class ::Fixnum
def foo
return true
end
end
end

5.foo
#⇒ true

请注意,在上面的代码中 module M没有意义,因为代码仍然猴子修补全局 Fixnum .此处的代码只是为了展示如何从另一个模块代码内部对全局类进行猴子修补。

另外,Ruby2 引入了 refinements , 很可能 what you are intended to use .

关于ruby - 向 Ruby 类添加的方法在 MiniTest 中抛出 NoMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28778175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com