3

配列の配列の奥深くにある要素にアクセスしようとするとき、要素が存在しない場合に「nil:NilClass の undefined method `[]'」というエラーが発生しないようにする最善の方法は何ですか?

たとえば、私は現在これを行っていますが、私には悪いようです:

if @foursquare['response']['groups'][0].present? && @foursquare['response']['groups'][0]['items'].present?
4

3 に答える 3

3

配列の内容によっては、.present?. また、Ruby はそのような構造の最後の値を取るだけなので、ifステートメントを省略できます。

@foursquare['response']['groups'][0] &&
@foursquare['response']['groups'][0]['items'] &&
@foursquare['response']['groups'][0]['items'][42]

この問題に対するより洗練されたソリューションは、egonil (ブログ投稿)、andand gem (ブログ投稿)、さらには Ruby 2.3 のセーフ ナビゲーション オペレーターです。

更新:最近の Ruby には#digメソッドが含まれており、この場合に役立つ可能性があります。詳細については、 user513951の回答を参照してください。

于 2011-06-13T18:51:49.550 に答える
2
if @foursquare['response']['groups'][0].to_a['items']
  . . .

を返すa をNilClass実装することが起こります 。これは、everyを to にマップし、通常はテストなしで単一の式を記述できることを意味します。#to_a[].nil[]

于 2011-06-13T18:50:13.953 に答える