今天下午刚发现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", andEvenMore:"US") 时,运行时会爆炸告诉我在 Mung 的 super 中没有定义名为 'initWithSomethingElse' 的方法。这是真的,但是这意味着我无法在 ruby 文件中定义自定义初始化程序。我目前的解决方法是提供一个采用哈希的同质初始化程序,然后各个子类根据需要解析哈希。我不喜欢这种方法并希望:A.解释为什么在 super 和 B 上调用过“initWithSomethingElse”。如果无法应用直接解决方案,另一种解决方法。谢谢大家!