5

Twitter 以外のツイートを分析しようとしていますが、含めたいものの 1 つは場所です。残念ながら、いくつかの値は nil であり、エラーが発生し続けます

undefined method `[]' for nil:NilClass (NoMethodError)

値が nil かどうかを確認するだけのチェックを実行したいのですが、何も動作しません。

nilの場合、入力は次のようになります

tweet = {"metadata"=> {"geo"=>nil}}

そして、これに値がある場合

tweet = {"metadata"=> {"geo"=>{"coordinates"=>[0,1]}}

これは私が試したものです

if "#{tweet['metadata']['geo']}".nil? == true
  puts("nil")
else
  puts("#{tweet['metadata']['geo']['coordinates']}"
end

私が気付いたのは、ifステートメントをfalseに変更すると「nil」を出力するため、geoが空かどうかを確認するだけであるということです。他に確認する方法がわかりません

4

3 に答える 3

3

問題は、文字列内のハッシュを補間している可能性があると思います。これにより、nil が実際には nil ではない空の文字列に変換されます。

試す:

if tweet['metadata']['geo'].nil?
  puts("nil")
else
  puts("#{tweet['metadata']['geo']['coordinates']}")
end
于 2013-07-08T19:28:13.370 に答える
3

ハッシュでフェッチを使用することは、この種の問題を処理するためのより良い方法です。以下の別の回答へのリンクは、これがいかにエレガントかつ美しく処理されているかを示しています。 Ruby - 多次元ハッシュにアクセスし、nil オブジェクトへのアクセスを避ける

于 2014-03-18T14:46:29.307 に答える
2

present?which をチェックしてnilandも使用しblankます。次のコードで確認してください。

if tweet['metadata']['geo'].present?
  puts("nil")
else
  puts("#{tweet['metadata']['geo']['coordinates']}")
end
于 2013-07-09T09:37:10.360 に答える