Je viens de découvrir MacRuby cet après-midi; l'homme est toujours COOL! Cependant, j'ai rencontré quelques difficultés en tentant de prolonger un ancien projet avec du MacRuby-fu. Voici l'affaire:Initialiseurs personnalisés MacRuby
j'ai donc une superclasse en Objective-C qui ressemble à ceci:
@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
Ainsi, dans un fichier ruby, nous l'appellerons Mung.rb qui ressemble à ceci:
class Mung < Foo
def initWithSomethingElse(else, andEvenMore:more)
super.initWithName("Moop", andLocation:else, andSomethingElse:more.addVal(42))
self
end
end
Quand je vais à instancier un Mung (myObj = Mung.alloc.initWithSomethingElse ("Boo", andEvenMore: "US"), l'environnement d'exécution explose en me disant il n'y a pas de méthode définie dans le super appelé Mung 'initWithSomethingElse' Cela est vrai, mais cela signifie que je ne peux pas définir d'initialiseurs personnalisés dans les fichiers ruby. round est de fournir un initialiseur homogène qui prend un hachage, puis les sous-classes individuelles analyser le hachage au besoin. Je n'aime pas cette approche et aimerais: A. Une explication de la raison pour laquelle 'initWithSomethingElse' est jamais appelée sur super, et B. Si aucune solution directe ne peut être appliquée, une solution alternative. Merci les gars!
Eh bien, je me sens bête. J'ai même pensé à cette solution après mon coucher hier soir. Certainement aurait dû essayer d'appeler soi-même d'abord ... Merci pour l'aide! – Grimless