Ruby 的 && 逻辑在 RSpec 测试时表现不一致



我有一个方法,它包括(在后续行中)以下代码:

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语句被触发了。我已经用"return line…"之前的put语句手动测试了它行,结果是,而"优先级_1?(line)'由于某种原因返回false'priority_1?(行)&line.marked_by?"(self)"正在评估为true。

这里发生了什么?

您混淆了符号:false和布尔值false

因为:false既不是假也不是零,所以它是真的,也就是说,就&&if这样的东西而言,它是真。

最新更新