更新:这完全是一场野鹅追逐。在我根据建议的答案进行更改后,它起作用了。但是,当我稍后尝试时,它不再起作用。我开始意识到这完全取决于我是如何使用调试器的。我在 areSameColor 里面有一个断点。当我单步执行代码时,我假设 areUniqueColors 没有被执行。但是,我越过了第二种情况,我认为它是短路的。最后,它正确评估了以下两个选项。我选择坚持我的第二个例子,因为它看起来更具可读性。感谢大家的时间。
我对以下 if 语句的评估方式感到困惑......
if(![self areSameColor:setCards] && ![self areUniqueColors:setCards]){
match = NO;
}
在我的测试用例 [self areSameColor:setCards] 评估为 NO...所以使用!我希望它能够评估第二个条件。在查看调试器时,它似乎正在快捷地变成 TRUE 结果。
我也试过这个:
if(!([self areSameColor:setCards] || [self areUniqueColors:setCards])){
match = NO;
}
在这两种情况下,它都没有评估第二个条件。areSameColor 和 areUniqueColor 返回 BOOL。
我的预期评价...
areSameColor | areUniqueColor | MATCH
NO | NO | match = NO
YES | NO | match UNCHANGED
NO | YES | match UNCHANGED
我怎么会想到这个错误?