我想测试散列中是否存在元素,如果它是> = 0,则将true或false放入数组中:
boolean_array << input['amount'] && input['amount'] >= 0
这在NilClass错误上没有引发&gt; =。但是,如果我这样做:
input['amount'] && input['amount'] >= 0 #=> false
没问题。基本上是:
false && (puts 'what the heck?') #=> false
arr = []
arr << false && (puts 'what the heck?') #=> stdout: 'what the heck?'
arr #=> [false]
是什么给出了?
答案 0 :(得分:6)
<<
的优先级高于&&
。请参阅Ruby Operator Precedence。
答案 1 :(得分:5)
目前它被归为:
(boolean_array << input['amount']) && input['amount'] >= 0
尝试:
boolean_array << (input['amount'] && input['amount'] >= 0)
但是,如果它最终为false,则表达式返回nil
,因此您需要:
boolean_array << (!input['amount'].nil? && input['amount'] >= 0)
答案 2 :(得分:5)
&&
总是在Ruby中评估短路。
问题是<<
优先于&&
,请参阅Rubydoc:precedence
所以行
arr << false && (puts 'what the heck?')
实际上是:
(arr << false) && (puts 'what the heck?')