Почему использование точечного синтаксиса вызывает LHS этого оператора дважды? - PullRequest
3 голосов
/ 27 марта 2009

Этот тест не пройден:

#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 ]

2 голосов
/ 27 марта 2009

Это ошибка компилятора, которая должна быть исправлена ​​в gcc-4.2.

2 голосов
/ 27 марта 2009

Публичное признание того, что вы используете точечный синтаксис в Objective-C, может привести к тому, что пуристы сожгут вас на костре; -)

Похоже, что это ошибка в этом конкретном сценарии, как говорит поток, вероятно, это какая-то магия предварительной обработки, которая неправильно ее расширяет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...