5

我正在尝试分析 Twitter 上的推文,我想包括的一件事是位置。不幸的是,有些值为零,我不断收到错误

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

我只想运行检查以查看该值是否为零,但我无法正常工作。

如果输入为 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

我注意到它只是检查 geo 是否为空,因为如果我将 if 语句更改为等于 false,它会输出“nil”。我不确定如何检查

4

3 回答 3

3

使用 fetch on hash 是处理此类问题的更好方法。以下指向另一个答案的链接显示了处理的优雅和精美。 Ruby - 访问多维哈希并避免访问 nil 对象

于 2014-03-18T14:46:29.307 回答
3

我认为问题可能是您在字符串中插入散列,这会将 nil 转换为空字符串,而实际上并不是 nil。

尝试:

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

使用present?which 检查nilblank。检查以下代码。

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