今天下午刚刚发现MacRuby;男人就是那么酷!然而,我试图用MacRuby-fu扩展一个旧项目时遇到了一些困难。这里的交易:MacRuby自定义初始化程序
所以我在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
当我去实例化一个绿豆(MyObj中= Mung.alloc.initWithSomethingElse(“嘘”,andEvenMore:“US”),运行时爆炸告诉我有没有在绿豆的超级称为定义的方法“initWithSomethingElse”这是真的,但这意味着我无法在ruby文件中定义自定义初始值设定项round是提供一个同构的初始化器,它接受一个散列,然后各个子类根据需要解析散列。我不喜欢这种方法,并希望:A.解释为什么'initWithSomethingElse'曾经被超级调用,以及B.如果没有直接的解决方案可以应用,一个替代的解决方法。多谢你们!
嗯,我感觉很傻。我昨天晚上睡觉后甚至想到了这个解决方案。绝对应该尝试先打电话给自己......感谢您的帮助! – Grimless 2010-12-04 17:37:00