是否可以在vala中创建混合数组?

是否可以在vala中创建混合数组?,vala,Vala,在Vala中,我看到当我声明数组时,我必须指定类型,如 int[] myarray = { 1, 2, 3 }; 我想知道是否有一种方法可以像 smtg[] myarray = { 1, 'two', 3 }; 我看到,在C++和C语言中,这是不可能的,但是我刚开始学习VARA,我没有任何C语言背景,所以我想确定。 这就是说,您可以创建一个可以容纳其他类型的东西的数组,如GLib.Value或GLib.Variant,Vala可以自动转换为这两种类型或从这两种类型转换,因此您可以执行以下操作

在Vala中,我看到当我声明数组时,我必须指定类型,如

int[] myarray = { 1, 2, 3 };
我想知道是否有一种方法可以像

smtg[] myarray = { 1, 'two', 3 };
<>我看到,在C++和C语言中,这是不可能的,但是我刚开始学习VARA,我没有任何C语言背景,所以我想确定。 这就是说,您可以创建一个可以容纳其他类型的东西的数组,如
GLib.Value
GLib.Variant
,Vala可以自动转换为这两种类型或从这两种类型转换,因此您可以执行以下操作

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

这通常是一个糟糕的想法(基本上就是放弃编译时类型安全性),但你可以做到。

代码被编译。伟大的但是现在。。。如何打印这样的数组?我不明白如何为foreach循环中的项设置类型。我无法在这个小框中给出完整的答案,但基本上您需要做一些类似于
foreach(GLib.Value-in-values){if(Value.holds(typeof(int)))stdout.printf(“%d”(int)Value);else(Value.holds(typeof(string)))stdout.printf(“%s”(string)Value);}
。您可能还想添加一些错误检查,以防它是您意想不到的类型。对于GValue,还有一种从一种类型转换为另一种类型的机制,大多数简单类型都应该支持转换为内置的字符串。请参见GLib.Value.type_transformable和transform。