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

杰里米

那么为什么会这样呢?它必须是名称空间错误,我只是不知道它在哪里。我在文件中向Fixnum添加了一个方法file.rb

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为测试包括模块(应用名称空间?),它仍然会引发错误。我可以很好地使用自定义类,只有当我尝试向现有的“开放类”中添加方法时,才可以使用自定义类。

阿列克谢·马蒂什金(Alexei Matiushkin)

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

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

5.foo
#⇒ true

请注意,在上面的代码module M中没有意义,因为尽管如此,该代码还是猴子修补了global Fixnum这里的代码只是为了展示您如何从另一个模块代码中猴子修补全局类。

另外,Ruby2引入了改进,这可能是您打算使用的改进

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

向Ruby Array开放类添加方法

来自分类Dev

抛出“ NoMethodError”的Model类中的枚举

来自分类Dev

在Ruby中向Selenium Webdriver添加方法

来自分类Dev

向从Hash继承的Ruby类中添加类似于“ each”的方法

来自分类Dev

向类添加方法

来自分类Dev

Ruby Minitest:访问设置方法中的变量

来自分类Dev

Java向类添加方法

来自分类Dev

如何在Ruby中向全局范围添加方法?

来自分类Dev

如何在Kotlin中向Java类添加静态方法

来自分类Dev

在gradle中向ant任务添加类路径的最佳方法

来自分类Dev

向XText中的现有类添加扩展方法

来自分类Dev

在Ruby中定义模块内部的方法(NoMethodError)

来自分类Dev

重新打开String类并在Ruby中添加.upcase方法

来自分类Dev

从createElement方法向对象添加ID /类

来自分类Dev

C ++:向基类接口添加方法

来自分类Dev

向Node.js类添加方法

来自分类Dev

Java向超类添加方法

来自分类Dev

使用原型向 Typescript 类添加方法

来自分类Dev

向Program类抛出TypeInitializationException

来自分类Dev

在Java中向Thread类添加函数

来自分类Dev

在Sphinx中向表添加类?

来自分类Dev

在模块中向Cucumber World添加类

来自分类Dev

使用PHP向输入中添加类

来自分类Dev

向球拍中的类添加类型注释

来自分类Dev

在模块中向Cucumber World添加类

来自分类Dev

在Java中向Thread类添加函数

来自分类Dev

无法从类中向字典添加项目

来自分类Dev

为什么color_enabled在Ruby的rspec 3.0.3中工作,会抛出NoMethodError?

来自分类Dev

ruby 模块中的 NoMethodError