2016-02-07 46 views
3

在瓦拉我看到,當我聲明數組我必須指定的類型,像可以在vala中創建混合數組嗎?

int[] myarray = { 1, 2, 3 }; 

不知是否有一種方法可以有混合的陣列等

smtg[] myarray = { 1, 'two', 3 }; 

我看到在this question他們說,在C++C#這是不可能的,但我剛開始學習vala,我沒有任何背景與任何類似的語言,所以我想確定。

回答

6

這就是說,你可以創建一些數組,可容納其他類型,如GLib.ValueGLib.Variant,並且瓦拉可以自動轉換到/來自這兩個,所以你可以做類似

GLib.Value[] values = { 
    1, 
    "two", 
    3.0 
} 

這通常是一個可怕的想法(你基本上扔掉編譯時類型安全),但你可以做到這一點。

+0

代碼被編譯。太棒了......但現在......我如何打印這樣的數組?我不明白我可以如何在foreach循環中設置該項目的類型。 http://pastebin.com/iZXpgQuK < - 這顯然是錯誤的 – wwr

+0

我不能在這個小盒子裏給出完整的答案,但基本上你需要做一些像'foreach(值GLib.Value值){if (value.holds(typeof(int)))stdout.printf(「%d」,(int)value); else if(value.holds(typeof(string)))stdout.printf(「%s」,(string)value); }}。你可能還想添加一些錯誤檢查,以防它是你沒有想到的類型。對於GValue,還有一種機制可以從一種類型轉換爲另一種類型,大多數簡單類型應該支持轉換爲內置字符串。請參閱GLib.Value.type_transformable和transform。 – nemequ

相關問題