次のテストを実行しました。
- (void)testExampleOther {
__block BOOL called = NO ;
NSInteger (^eval)(NSInteger) = ^NSInteger (NSInteger x) {
called = YES ;
return x ;
} ;
BOOL failed = NO ;
BOOL ok = NO ;
for (NSInteger i = 0 ; i < 256 ; ++i) {
ok &= eval(i) ;
if (ok) {
failed = YES ;
NSLog(@"bitwise & used as logic wise && failed for value: %d", i) ;
}
}
if (!failed) {
NSLog(@"All values 'x' from 0 to 255 returned NO for:\" BOOL ok = NO ; ok &= x ; \"") ;
}
if (called) {
NSLog(@"BUT x was evaluated even though it did not need to.") ;
}
}
そして、ここに関連する出力があります:
Test Case '-[JFBLib_Tests testExampleOther]' started.
2013-08-21 15:50:47.127 xctest[23845:303] All values 'x' from 0 to 255 returned NO for:" BOOL ok = NO ; ok &= x ; "
2013-08-21 15:50:47.127 xctest[23845:303] BUT x was evaluated even though it did not need to.
Test Case '-[JFBLib_Tests testExampleOther]' passed (0.000 seconds).
これは次のことを検証しているようです:
x
inの値は、最初から 0 (NO)のok &= x
場合は無関係です。ok
x
その値が違いを生まない場合でも、何があっても評価されます。