我有一个方法,包括(在后续行中)以下代码:
candidate_lines.each do |line|
return line if priority_1?(line) && line.marked_by?(self)
end
据我所知,其中的方法无关紧要。是什么让我感到困惑,我有一个测试应该只是按照我给出的规范跳过该方法的一部分:
it "without any priority 1 lines, returns all priority 2 lines marked by itself" do
line1 = double :line, marked_by?: true
line2 = double :line, marked_by?: true
allow(joshua).to receive(:priority_1?).and_return(:false)
expect(joshua).to receive(:candidate_lines).and_return([line1, line2])
expect(joshua.tiebreak_lines).to eq [line1, line2]
end
然而,当我运行测试时,返回语句被触发。我已经在'return line ...'行之前使用puts语句手动测试了它,结果是,'priority_1?(line)'返回false,出于某种原因'priority_1?(line)&& ; line.marked_by?(self)'正在评估为真。
这里发生了什么?
答案 0 :(得分:6)
您将符号:false
与布尔值false
因为:false
既不是假也不是零,所以它是真实的,就像&&
或if
这样的事情来说,这是真的。