Ruby:未定义的方法`[]'为nil:NilClass在尝试在哈希数组上获取Enumerator时

Joe*_*oug 5 ruby arrays hash enumerator

我试图循环哈希数组.当我到达我获取Enumerator开始循环的点时,我收到以下错误:

undefined method `[]' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

我的代码如下所示:

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']
    [...]
Run Code Online (Sandbox Code Playgroud)

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

为什么我一直收到这个错误?

谢谢!

Sch*_*ern 10

undefined method `[]' for nil:NilClass说你试图这样做something[index],但是somethingnil.Ruby不会让你nil用作数组(即调用[]它上面的方法).

问题不attributs.each在线,而是在调用[]方法的行之后attribut.

typeAttribut = attribut['objectTypeAttribute']
Run Code Online (Sandbox Code Playgroud)

这表明什么attributs是零.如果attributsParam列表包含nil,就会发生这种情况.

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

# [nil]
puts attributs.inspect
Run Code Online (Sandbox Code Playgroud)

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

还要考虑你是否真的需要该attributs = Array(attributsParam)行,或者它是否已经是可枚举的东西.