1. ホーム
  2. arrays

[解決済み] Ruby: ハッシュの配列で Enumerator を取得しようとすると nil:NilClass の未定義メソッド `[]' が発生する。

2022-03-03 15:23:19

質問

ハッシュの配列に対してループ処理を行おうとしています。ループを開始するためにEnumeratorをフェッチするポイントに到達すると、次のエラーが発生します。

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 変数が nil または空でないことを確認します。両方とも(同じだから!)59個のHashオブジェクトを含んでいますが、まだArrayのEnumeratorを取得することができません。

なぜこのようなエラーが発生するのですか?

ありがとうございます。

解決方法は?

undefined method `[]' for nil:NilClass を実行しようとしたとあります。 something[index] しかし somethingnil . Ruby では nil を配列として呼び出す(つまり [] メソッドを実行します)。

問題は attributs.each の行ではなく、その次の行で [] メソッドを attribut .

typeAttribut = attribut['objectTypeAttribute']

の中にあるものを示しています。 attributs がnilの場合。これは attributsParam は、このようにnilを含むリストです。

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

# [nil]
puts attributs.inspect

最も簡単なデバッグ方法は puts attributs.inspect ループの直前で

が本当に必要なのかどうかも考えてみてください。 attributs = Array(attributsParam) の行があるか、あるいはすでに何か 列挙可能 .