このテストは失敗します。ドット構文を使用して、このステートメントの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でドット構文を使用し、公共の場で認める
ああ、ありがとう。今私は純度に変換すると考えてください。私の場合、セレクタはWebサービスを厄介だと呼んでいました。 興味があれば、apple(#6729855)にバグを記録しました。 –