更新:这是一个疯狂的追逐。在我根据建议的答案进行更改后,该方法奏效了。但是,当我稍后尝试时,它不再工作。我已经意识到这一切都是在我如何使用调试器。我在areSameColor里面有一个断点。当我逐步完成代码时,我认为areUniqueColors没有被执行。但是,我正在跨越第二个条件,我认为这是短路。最后,它正确评估下面的两个选项。我选择坚持我的第二个例子,因为它看起来更具可读性。感谢大家的时间。If语句短路 - 如何评估
我如何if语句正在评估以下迷茫......
if(![self areSameColor:setCards] && ![self areUniqueColors:setCards]){
match = NO;
}
在我的测试案例[自areSameColor:setCards]计算结果为NO ...所以使用!我希望它能评估第二种情况。在看调试器的时候,它似乎正在变成一个真正的结果。
我也试图与此:
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
我怎么思考这个错误的?
areSameColor和areUniqueColors的预期结果是什么,具体取决于您想要设置的匹配标志。 – 2013-04-08 04:47:26
在这种情况下,areSameColor == NO和areUniqueColor == YES。我期望match = NO被跳过。 – 2013-04-08 04:48:30