Ruby处理空数组,在Case条件中引用

时间:2014-09-08 15:09:05

标签: ruby-on-rails ruby

我有以下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)

如何判断执行并忽略输入丢失导致的错误?

感谢您的任何建议! 亨德里克

2 个答案:

答案 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?