Только что открыл MacRuby сегодня днем; Человек это всегда круто! Однако я столкнулся с некоторыми трудностями, пытаясь расширить старый проект с помощью MacRuby-fu. Вот сделка:
Итак, у меня есть суперкласс в Objective-C, который выглядит так:
@implementation Foo
- (id) init {
if (self = [super init]) {
//Do nothing, don't have enough data...
}
return self;
}
- (id) initWithName:(NSString*)n andLocation:(NSString*)loc andSomethingElse:(Bar*)b {
if (self = [super init]) {
//Set a LOT of internal state...
}
return self;
}
@end
Итак, в файле ruby мы назовем его Mung.rb, который выглядит следующим образом:
class Mung < Foo
def initWithSomethingElse(else, andEvenMore:more)
super.initWithName("Moop", andLocation:else, andSomethingElse:more.addVal(42))
self
end
end
Когда я иду, чтобы создать экземпляр Mung (myObj = Mung.alloc.initWithSomethingElse ("Boo", иEvenMore: "US"), среда выполнения взрывается, сообщая мне, что в суперспособлении Мунга, называемом initWithSomethingElse, не определено ни одного метода. истина, но это означает, что я не могу определить пользовательские инициализаторы в файлах ruby. Мой текущий обходной путь - предоставить однородный инициализатор, который принимает хэш, а затем отдельные подклассы анализируют хэш по мере необходимости. Мне не нравится этот подход, и я хотел бы : A. Объяснение того, почему initWithSomethingElse всегда вызывается на super, и B. Если прямое решение не может быть применено, альтернативный обходной путь. Спасибо, ребята!