3
在瓦拉我看到,當我聲明數組我必須指定的類型,像可以在vala中創建混合數組嗎?
int[] myarray = { 1, 2, 3 };
不知是否有一種方法可以有混合的陣列等
smtg[] myarray = { 1, 'two', 3 };
我看到在this question他們說,在C++和C#這是不可能的,但我剛開始學習vala,我沒有任何背景與任何類似的語言,所以我想確定。
在瓦拉我看到,當我聲明數組我必須指定的類型,像可以在vala中創建混合數組嗎?
int[] myarray = { 1, 2, 3 };
不知是否有一種方法可以有混合的陣列等
smtg[] myarray = { 1, 'two', 3 };
我看到在this question他們說,在C++和C#這是不可能的,但我剛開始學習vala,我沒有任何背景與任何類似的語言,所以我想確定。
號
這就是說,你可以創建一些數組,可容納其他類型,如GLib.Value
或GLib.Variant
,並且瓦拉可以自動轉換到/來自這兩個,所以你可以做類似
GLib.Value[] values = {
1,
"two",
3.0
}
這通常是一個可怕的想法(你基本上扔掉編譯時類型安全),但你可以做到這一點。
代碼被編譯。太棒了......但現在......我如何打印這樣的數組?我不明白我可以如何在foreach循環中設置該項目的類型。 http://pastebin.com/iZXpgQuK < - 這顯然是錯誤的 – wwr
我不能在這個小盒子裏給出完整的答案,但基本上你需要做一些像'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