2017-09-18 9 views
1

C#では、実行時にexpandoオブジェクトを使用して定義されたフィールドを持つ動的オブジェクトを持つことができます。例:あなたが見ることができるようにJuliaはダイナミックな "expandoオブジェクト"をla C#でサポートしていますか?

dynamic contact = new ExpandoObject(); 
contact.Name = “Patrick Hines”; 
contact.Phone = “206-555-0144”; 

接触オブジェクトは、我々が以前にオブジェクトの構造を宣言せずに、オブジェクトのフィールドを設定することができます意味で、動的です。私はそれを理解するよう、OBJオブジェクトがフィールドPROP1とタイプから作成する必要があり、

function setProp1(obj) obj.prop1=1 end 

しかし、私たちはのように、宣言された型なしパラメータ/変数を持つことができジュリアに理解しています。 prop1がどこかのフィールドとして宣言されていない場合、setProp1は、フィールドprop1を動的に設定できません。私が完全なダイナミズムを望んでいて、パフォーマンスを心配したくない場合は、ジュリアに「expandoオブジェクト」を作成する方法がありますか?

+2

[このページ](https://docs.julialang.org/en/release-0.4/manual/noteworthy-differences/)では、['dict'](https://docs.julialang.org/)を使用することを提案しています。 en/release-0.4/stdlib/collections /#Base.Dict)。 * "Juliaのタイプは、実行時にフィールドを動的に追加することをサポートしていません" * –

+0

いつかより便利な構文が作成されることを願っています。 expandoオブジェクトのシンタックスは、Pythonや他の完全な動的言語から来る恩人に役立つかもしれません。 – gabomgp

+0

@RobertHarveyあなたは古いドキュメント(0.4)を安定したものにリンクしています(今は0.6) - > https://docs.julialang.org/en/stable/manual/noteworthy-differences/(例えば、Pythonとの12の違いが文書化されています0.4と0.6で10)plsあなたのコメントを編集し、私は私を削除します:) – Liso

答えて

2

現在、未定義のフィールド名に割り当てるだけでは、新しいフィールドを動的に作成することはできません。将来は#1974: allow overloading of a.b field access syntaxなどの機能を使用することは可能です。ただし、現在Julia 2.0 +のマイルストーンでタグ付けされていることに注意してください。それは高い優先度ではなく、これまで起こっていない可能性があります。

@expando contact.Name = "foo"contact[:Name] = "foo"に変換されるように、フィールドアクセスをdictのような構文に変更するマクロを作成することは可能ですが、辞書やインデックス構文を直接使用するほうがずっと簡単です。

関連する問題