Genie 中嵌套泛型类型的语法是什么?
What is the syntax for nested generic types in Genie?
我想声明一个 HasTable,其中 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
。
正确的语法是什么?
报错信息与vala不同
Genie 的错误消息看起来像是编译器的解析问题。
vala的报错信息更清楚
我在 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",其他的都可以。
'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
没有正确的语法,它只是不支持那个。
我想声明一个 HasTable,其中 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
。
正确的语法是什么?
报错信息与vala不同
Genie 的错误消息看起来像是编译器的解析问题。 vala的报错信息更清楚
我在 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",其他的都可以。 '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
没有正确的语法,它只是不支持那个。