Genie 中嵌套泛型类型的语法是什么?

2023-12-11

我想声明一个哈希表string因为它是关键并且array of int因为它的价值:

[indent=4]

init
    var h = new HashTable of string, array of int (str_hash, str_equal)
    h["a"] = {1, 2, 3}
    h["b"] = {5, 6, 7}

错误信息:

nested_generic_types.gs:4.27-4.28: error: syntax error, expected line end or semicolon but got `of'
    var h = new HashTable of string, array of int (str_hash, str_equal)

所以双of似乎令人困惑valac here.

正确的语法是什么?


错误信息与bala不同。

Genie 的错误消息看起来像是编译器的解析问题。 vala的错误信息更清晰。

我在瓦拉的测试:

void main () {
    var h = new HashTable<string, int[]> (str_hash, str_equal);
}

错误信息:

error: `int[]' is not a supported generic type argument, 
use `?' to box value types

看起来只是不支持“数组”,其他的都可以。 “array”不能是任何容器中的元素(HashTable、Array、GenericArray、array..)

一些测试:一切正常!

[indent=4]

init
    var h = new HashTable of string, HashTable of string, int (str_hash, str_equal)
    h["a"] = new HashTable of string, int (str_hash, str_equal)
    h["a"]["b"] = 123
    stdout.printf ("%d\n", h["a"]["b"])

    var a = new HashTable of string, Array of int (str_hash, str_equal)
    a["a"] = new Array of int
    // a["a"].append_val (456)
    // error: lvalue expected
    var x = 456
    a["a"].append_val (x)
    stdout.printf ("%d\n", a["a"].index(0))


    var b = new HashTable of string, GenericArray of int (str_hash, str_equal)
    b["a"] = new GenericArray of int
    b["a"].add (567)
    stdout.printf ("%d\n", b["a"].get (0))

    var d = new array of Array of int = {new Array of int(), new Array of int}
    // ERROR IF {new Array of int, new Array of int}
    var y = 321
    d[0].append_val (y)

    stdout.printf ("%d\n", d[0].index(0))

解释来自:http://blog.gmane.org/gmane.comp.programming.vala/month=20140701

没有正确的语法,它只是不支持这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Genie 中嵌套泛型类型的语法是什么? 的相关文章

随机推荐