此测试将失败:
#import "GTMSenTestCase.h"
@interface Person : NSObject
@property (readonly) NSString *name;
@end
@implementation Person
- (NSString *)name { return @"Nick"; }
@end
@interface TemplateUnitTest : GTMTestCase @end
@implementation TemplateUnitTest
static BOOL called = NO;
- (Person *)get {
if (called) { STFail(nil); }
called = YES;
return [[Person new] autorelease];
}
- (void)testPropertyMakesThingGetSentTwice {
NSString *s = [[self get].name stringByAppendingString:@"foo"];
STAssertEqualObjects(@"Nickfoo", s, nil);
}
@end
如果我将[self get].name
替换为[[self get] name]
,则会通过。即,使用点语法,'。'的LHS。被评估两次。这是怎么发生的?
答案 0 :(得分:2)
公开承认你在Objective-C中使用点语法很可能会让你被纯粹主义者焚烧; - )
在这个特定场景中看起来好像是bug,正如线程所说的那样,它可能是一些正在扩展错误的预处理魔法。
答案 1 :(得分:2)
这是一个编译器错误,应该在gcc-4.2中修复。