我有以下Ruby代码:
case [input.deep_array_count, input[0][9].nil?, input[1][8].nil?, input[2][8].nil?]
when [2, false, true, true] then QueryType = 1
when [3, false, true, true] then QueryType = 3
else
end
我的输入数组包含多个子数组。我想扩展这个case语句,找出子数组的数量,以及某些条件是真还是假。
问题是,当输入数组太短时,"它会抛出一个错误。例如,如果我在"输入"中有3个子数组,则进行以下检查:
input[2][8].nil?
会导致代码失败,因为子数组不存在:
undefined method `[]' for nil:NilClass (NoMethodError)
如何判断执行并忽略输入丢失导致的错误?
感谢您的任何建议! 亨德里克
答案 0 :(得分:0)
您可以使用try
方法,如下所示:
input[2].try(:[],8).nil?
事实上,x.try(method, args)
相当于x.nil? ? nil : x.method(args)
。
在您的具体情况下,
input[2].try(:[],8).nil?
相当于
(input[2].nil? ? nil? : input2[2][8]).nil?
...因为an_array[x]
是执行an_array.send(:[], x)
的简短方法。
答案 1 :(得分:0)
您似乎正在检查子阵列中的特定条件(假设它存在)。
input[2][8].nil?
如果在case语句中检查复合条件中是否存在子数组呢?
input[2].nil? || input[2][8].nil?