2009-03-27 7 views
3

이 시험은 실패합니다도트 구문을 사용하여이 명령문의 LHS를 두 번 호출하는 이유는 무엇입니까?

#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 두 번 평가됩니다. 어떻게 될까요? 당신이 목표 - C에서 도트 구문을 사용 공개적으로 인정하는

답변

2

는에 의해 화형 얻을 가능성이 순수 주의자 ;-)

는,이 특정 시나리오에 bug처럼 그것은 스레드로 보이는

말하자면, 아마도 그것을 잘못 확장하고있는 전처리 마법 일 것입니다.

+0

아, 감사합니다. 나에게 순결로의 전환을 고려해 보라. 필자의 경우 셀렉터는 웹 서비스를 불쾌하게 여겼다. 관심이 있으시면 apple (# 6729855)에 버그를 기록했습니다. –

2

이것은 컴파일러 버그이며 gcc-4.2에서 수정해야합니다.

관련 문제