【发布时间】:2014-01-23 00:16:37
【问题描述】:
我需要找出data[i][j][k] 元素是否存在,但我不知道data[i] 或data[i][j] 本身是否不为零。
如果我只是data[i][j][k].nil?,它会抛出undefined method [] for nil:NilClass 如果data[i] 或data[i][j] 是nil
所以,我现在正在使用
unless data[i].nil? or data[i][j].nil? or data[i][j][k].nil?
# do something with data[i][j][k]
end
但这有点麻烦。
如果没有data[i].nil? or data[i][j].nil? or data[i][j][k].nil?,有没有其他方法可以检查data[i][j][k] 是否存在?
【问题讨论】:
-
使用
defined?关键字。 stackoverflow.com/questions/288715/… -
@jigz: 不。
defined?可以告诉您是否存在类似[]的方法,但无法预测它是否会返回nil。示例:a=[]; defined?(a[2]) #=> "method" -
如果您不反对使用 gem,您可以使用我的
try_togem 并执行try_to { a[i][j][k] }将返回值或nil。您甚至可以指定一个默认值,例如try_to(42) { a[i][j][k] },它将返回该值或 42。rubygems.org/gems/try_to