Я объявил переменную функцию / метод в классе Obj-C следующим образом:
@interface Foo
+ (void) print: (id) firstMessage, ...;
@end
@implementation
+ (void) print: (id) firstMessage, ...{
va_list ap
va_start (ap, firstMessage)
for (id message = firstMessage; message != nil; message = va_arg(ap, id)){
NSLog(@"message: %@", message);
}
va_end(ap)
}
@end
Это работает при вызове функции Obj-C следующим образом:
[Foo print: @"Hello, world.", @"I'm Xavier.", nil];
Консоль выдаст:
=> Hello, world.
=> I'm Xavier.
Но это не работает, когда я вызываю вызов функции в MacRuby:
Foo.print (@"Hello, world.", @"I'm Xavier.", nil)
Затем консоль печатает:
=> Hello, world.
=> Hello, world.
=> (lldb)
Да, первое сообщение печатается дважды! И тогда это терпит крах.
Я обнаружил, что назначение "message = va_arg (ap, id)" не работает. Сообщение obj не изменяется. Я думал, что это может быть проблема в MacRuby (версия 0.10).
Я думал, что MacRuby принимает только первый аргумент и передает его в метод Obj-C. Не так ли? Я не прав?