如果结果为零,那么我得到NoMethodError - undefined method 'length' for nil:NilClass:
有没有办法我不必使用两个条件?我认为ruby不会评估条件的第二部分,以防结果为空,因为条件永远不会为真
if (not results.empty? && results[-1].length == 2)
(4-results[-1].length).times {|i| results[-1] << ""}
end
答案 0 :(得分:2)
我会考虑将其更改为IMO“更好地阅读”的内容:
if results.any? && (results[-1].length == 2)
...
end
要避免两个明确的条件,请安装andand gem:
pry(main)> require 'andand'
pry(main)> r1 = []
pry(main)> r2 = ["hi", "there"]
pry(main)> r3 = ["hi", "no"]
pry(main)> puts "foo" if r1[-1].andand.length == 2
=> nil
pry(main)> puts "foo" if r2[-1].andand.length == 2
=> nil
pry(main)> puts "foo" if r3[-1].andand.length == 2
foo
=> nil
答案 1 :(得分:1)
在ruby中,not
运算符的precedence低于&&
,因此您的代码被解释为
not (results.empty? && (results[-1].length == 2))
你可能想要使用!运算符,而不是not
,但具有更高的优先级。