Ironrubyの過負荷コンストラクターを使用してオブジェクトをインスタンス化する問題?
質問
オーバーロードされたコンストラクター(int id)、(GUID ID)、およびさらにパラメーターオプションを備えたAC#クラス「ドキュメント」があり、0パラメーターの過負荷はありません。 Ironrubyで新しいオブジェクトを作成しようとすると、つまずきます。それは0の引数を持ちたいと言っているので、:
d = Document.new
正常に動作します。しかし、私が試してみるとき
d = Document.new some_integer
エラーメッセージが表示されます
"wrong number of arguments (1 for 0)"
クラスdefは次のようになります:
public Document(int id) : base(id)
{
// some code
}
編集:完全なコードは次のとおりです。それはアンブラコの文脈にあり、私は名前空間を低ケースで翻訳して、アイアンルビーでそれらを使用できるようにすることができます。
$LOAD_PATH << "C:\\inetpub-dev\\dev.mysite.com\\bin"
require "cms.dll"
require "businesslogic.dll"
Web = Object.const_get("umbraco").const_get("cms").const_get("businesslogic").const_get("web")
existing_document_id = 1065
existing_document = Web::Document.new(existing_document_id)
C#で同じコード:
var existingDocument = new umbraco.cms.businesslogic.web.Document(1065);
解決
どこかで名前空間の衝突を打っているのだろうか。
ドキュメントがあなたが含めているもののどこかで定義されている可能性はありますか?
あなたの基本クラスがどのように見えるかはわかりません
また、あなたが使用しているものが必要/含めるものがわかりません
私は例を設定しましたが、それは期待どおりに機能しているようです:
namespace IRConstructorParamSpike
{
public abstract class BaseDocument
{
public BaseDocument(int id) { }
}
public class Document : BaseDocument
{
public Document(int id) : base(id) { }
}
public class SomeDocument : BaseDocument
{
public SomeDocument(int id) : base(id) { }
}
}
セッションがどのように見えたか(Ironruby 1.1.4.0を使用):
'irconstructorparamspike.dll' => trueが必要です
d = document.new(ir):1:in `const_missing ':uninitialized constant object :: document(nameerror)from(ir):1 < - 名前空間が含まれていなかったからです
d = irconstructorparamspike :: document.new(ir):1:誤った数の引数(1 for 1の0)(argumpererror) <-パラメーターのないコンストラクターなしで期待すること
d = irconstructorparamspike :: document.new 10 => irconstructorparamspike.document
この簡単な例コードを試してみて、期待どおりにオブジェクトを作成できるかどうかを確認できますか?