今日の午後、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のスーパーである「initWithSomethingElse」にメソッドが定義されていないことを通知します。これは本当ですが、これは、rubyファイルでカスタム初期化子を定義できないことを意味します。現在の回避策は、ハッシュを取得する同種の初期化子を提供し、個々のサブクラスが必要に応じてハッシュを解析することです。このアプローチは好きではないので、次のようにします。 'initWithSomethingElse'がsuperで呼び出される理由の説明、およびB.直接的な解決策を適用できない場合は、別の回避策。ありがとうございます。