1

我正在解析 JSON 数据,并且在很多数据上我必须调用一些方法。有时数据是“nil”,如果我不检查 nil,如果调用方法会引发错误。

我现在正在做的是创建一个变量,检查 nil,然后在调用它的方法后最终将它分配给我的哈希。这是一个例子:

lat = event['location']['lat']
lng = event['location']['lng']
popularity = event['popularity']

ar_show.lat = lat.round(4) if lat
ar_show.lng = lng.round(4) if lng
ar_show.popularity = popularity.round(4) if popularity      

有没有“更好”或更优雅的方式来做到这一点?目前我这样做的方式似乎非常多余,只是为了避免在 nil 上调用方法而创建一个额外的变量。我可以做这个:

ar_show.lat = event['location']['lat'].round(4) if event['location']['lat']

但这更糟!

也许这对我来说很奇怪的原因是我花了很多时间编写 Objective-C 并且我可以懒惰因为向“nil”发送消息很好而且你可以避免大量的 nil 检查,但是也正因为如此,有时也会把自己搞砸。


更新:

我刚刚在一个使用to_f强制的语句中找到了一种方法:

ar_show.lat = event['location']['lat'].to_f.round(4)

to_f在 nil 上会成功0.0,处理 nil 情况,并避免额外的变量或语句。我只是想知道在将其输入代码之前是否有不利之处?

4

2 回答 2

3

您可以使用默认值:

lat = event['location']['lat'] || 0
ar_show.lat = lat.round(4)

你必须nil在某个时候处理这​​个案子,为什么不在分配它的时候处理它呢?

于 2012-12-24T17:21:45.047 回答
1

我在一个使用to_fto coerce nil 的语句中找到了一种方法:

ar_show.lat = event['location']['lat'].to_f.round(4)

to_f在 nil 上将使其 0.0 处理 nil 情况,避免额外的变量或语句。

从这个视频中得到了答案。

于 2012-12-24T18:25:13.137 回答