【问题标题】:Is it possible to create a mixed array in vala?是否可以在 vala 中创建混合数组?
【发布时间】:2016-02-07 21:22:27
【问题描述】:

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

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

我想知道是否有办法让混合数组像

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

我在this question 看到他们说在 C++C# 中这是不可能的,但我刚开始学习 vala,我没有任何背景类似 C 的语言,所以我想确定一下。

【问题讨论】:

    标签: vala


    【解决方案1】:

    没有。

    也就是说,您可以创建一个包含其他类型的数组,例如 GLib.ValueGLib.Variant,Vala 可以自动转换为/从这两者转换,因此您可以执行类似的操作

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

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

    【讨论】:

    • 代码被编译。太好了……但是现在……我如何打印这样的数组?我不明白如何在 foreach 循环中为项目设置类型。 pastebin.com/iZXpgQuK
    • 我不能在这个小盒子里给出完整的答案,但基本上你需要做一些类似foreach (GLib.Value value in values) { 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。
    猜你喜欢
    • 2016-08-14
    • 1970-01-01
    • 2017-05-12
    • 2018-07-17
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多