Ruby: nil:NilClass 的未定义方法“[]”试图在哈希数组上获取枚举器时

Ruby: undefined method `[]' for nil:NilClass when trying to get Enumerator on an Array of Hashes

我正在尝试循环哈希数组。当我到达获取枚举器开始循环的位置时,出现以下错误:

undefined method `[]' for nil:NilClass

我的代码如下所示:

def extraireAttributs (attributsParam)
  classeTrouvee = false
  scanTrouve = false
  ownerOSTrouve = false
  ownerAppTrouve = false
  resultat = Hash.new(0)
  attributs = Array(attributsParam)

  attributs.each do |attribut| #CRASHES HERE!!!
    typeAttribut = attribut['objectTypeAttribute']
    [...]

我在调试模式下进行了检查,以确保 attributsParams 参数和 attributs 变量不为零或为空。两者(因为它们相同!)都包含 59 个 Hashes 对象,但我仍然无法在 Array 上获得 Enumerator。

为什么我总是收到这个错误?

谢谢!

undefined method `[]' for nil:NilClass 表示您尝试执行 something[index]somethingnil。 Ruby 不允许您将 nil 用作数组(即调用 [] 方法)。

问题不在 attributs.each 行,而是在 attribut.

上调用 [] 方法的那一行
typeAttribut = attribut['objectTypeAttribute']

这表明 attributs 中的某些内容为零。如果 attributsParam 是一个像这样包含 nil 的列表,就会发生这种情况。

attributsParam = [nil];
attributs = Array(attributsParam);

# [nil]
puts attributs.inspect

调试它的最简单方法是在循环之前添加 puts attributs.inspect

还要考虑您是否真的需要 attributs = Array(attributsParam) 行,或者它是否已经存在 Enumerable.