今天下午剛剛發現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