2017-09-18 32 views
1

在C#中可能有一個動態對象,其中包含使用expando對象在運行時定義的字段。例如:Julia支持動態的「expando對象」a la C#?

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

正如你所看到的,接觸對象是動態的,在這個意義上,我們可以設置的對象字段,而無需事先聲明對象的結構。我在茱莉亞明白,我們可以有一個參數/變量不聲明的類型,如:

function setProp1(obj) obj.prop1=1 end 

但是,據我瞭解,在OBJ對象必須從一個字段爲prop1一個類型創建。如果prop1未作爲字段聲明,則setProp1不能動態設置字段prop1。如果我想要充分的活力,並且我不想擔心表現,有沒有辦法在Julia中創建「expando物體」?

+2

[本頁](https://docs.julialang.org/zh/release-0.4/manual/noteworthy-differences/)建議使用['dict'](https://docs.julialang.org/ EN /釋放-0.4/STDLIB /收藏/#Base.Dict)。 *「Julia的類型不支持在運行時動態添加字段。」* –

+0

我希望有一天會創建更方便的語法。 la expando對象的語法可以幫助來自python或其他完整動態語言的人員。 – gabomgp

+0

@RobertHarvey你鏈接的舊文檔(0.4)穩定的一個(現在0.6)是 - > https://docs.julialang.org/en/stable/manual/noteworthy-differences/(例如有12個記錄與Python 0.4,只有10在0.6)請編輯您的評論,我會刪除我的:) – Liso

回答

2

不,目前不可能僅通過分配未定義的字段名稱來動態創建新字段。將來可能會使用像#1974: allow overloading of a.b field access syntax這樣的功能。但是,請注意,它目前在Julia 2.0+里程碑中被標記;這不是一個高度優先事項,可能會或可能不會發生。

可以創建一個將字段訪問更改爲字典式語法的宏,例如@expando contact.Name = "foo"被轉換爲contact[:Name] = "foo",但直接使用字典和索引語法可能更好也更容易。