2009-03-27 9 views
3

このテストは失敗します。ドット構文を使用して、このステートメントのLHSを2回呼び出すのはなぜですか?

#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。 2回評価される。これはどうやって起こるのですか?あなたはObjective-Cでドット構文を使用し、公共の場で認める

答えて

2

はあなたによって火あぶりに取得する可能性がある純粋主義者;-)

それは、この特定のシナリオで bugだようですが、スレッドとして見えます

おそらくそれを誤って拡張しているのは、あらかじめ処理している魔法のようだと言います。

+0

ああ、ありがとう。今私は純度に変換すると考えてください。私の場合、セレクタはWebサービスを厄介だと呼んでいました。 興味があれば、apple(#6729855)にバグを記録しました。 –

2

これはコンパイラのバグであり、gcc-4.2で修正する必要があります。

関連する問題