我正在尝试遍历包含测试用例的类的各种实例的数组。数组应具有each根据RubyDoc 的功能:
像所有包含Enumerable模块的类一样,Array具有each方法,该方法定义应迭代哪些元素以及如何对其进行迭代。
以下代码有效:
@array = []
(0..20).to_a.each{ |i|
@array.push(i)
}
@array.each { |i|
puts i
}
Run Code Online (Sandbox Code Playgroud)
但这不是:
@violation_array = []
(0..2).to_a.each{ |i|
@violation_array.push(Violation.new("violation#{i}"))
}
@violation_array.each { |violation|
puts violation
}
Run Code Online (Sandbox Code Playgroud)
并产生此错误:
NoMethodError: undefined method `each ' for #<Array:0x007f3aa232ece8>
Run Code Online (Sandbox Code Playgroud)
@violation_array.inspect之前的值each是:
[#<Violation:0x007f71e4965e30 @key="violation0">, #<Violation:0x007f71e4965bb0 @key="violation1">, #<Violation:0x007f71e49657f0 @key="violation2">]
Run Code Online (Sandbox Code Playgroud)
关于这个数组为什么缺少each功能的任何想法?
编辑:我在多个设置(python,ruby,markdown)中遇到了这个问题。2年后,我终于明白了:我总是space在按住AltGr需要输入的前一个或后一个字符的同时键入内容。这样就形成了不可分割的空间,请参阅如何使用altgr + space禁用不间断空间以获取解决方案)。
我认为错误消息可能会发亮。方法名称中有一个空格,因此不存在的方法是"each "。我以某种方式认为您的代码中出现了一些虚假的空格。数组上肯定有一个"each"方法,但没有"each "方法。