注意:我的问题是数组,而不是[Array或GenericArray] 这是我的代码:
init
var h = new HashTable of string, Int? (str_hash, str_equal)
h["a"] = Int ({1, 2, 3})
h["b"] = Int ({5, 6, 7}) // HERE: WORKS FINE
// ERROR HERE:
// Array concatenation not supported for public array variables and parameters
h["a"].data += 4
struct Int
data: array of int
construct (a: array of int)
this.data = a
如何解决这个问题?
答案 0 :(得分:1)
不是一个真正的答案,而是另一种表达方式:
init
var h = new HashTable of string, Int? (str_hash, str_equal)
h["a"] = Int ({1, 2, 3})
h["b"] = Int ({5, 6, 7})
h["a"].append ({4})
struct Int
data: array of int
construct (a: array of int)
this.data = a
def append (a: array of int)
this.data = this.data + a
现在没有"变量和参数的混合"继续,这解决了原始代码触发的编译器错误。
问题是这也会导致编译错误:
resize_array.gs:14.21-14.33: error: Incompatible operand
this.data = this.data + a
可以简化为此代码:
init
x: array of int = {1, 2, 3}
y: array of int = {4, 5, 6}
z: array of int = x + y
这也会产生相同的编译错误。
resize_array.gs:21.23-21.27: error: Incompatible operand
z: array of int = x + y
我在此基础上添加了一个新问题:
How to concatenate two arrays?
事实证明,对于数组(它虽然适用于字符串!)在Vala / Genie中并不是一项简单的任务。
有关如何执行此操作的解决方案,请参阅另一个问题。
我个人使用Gee
个容器(如果我不经常调用一些需要普通数组的C函数)。
使用Array of int
的解决方案:
init
var h = new HashTable of string, Int? (str_hash, str_equal)
h["a"] = Int ({1, 2, 3})
h["b"] = Int ({5, 6, 7})
h["a"].append ({4})
struct Int
data: Array of int
construct (a: array of int)
data = new Array of int;
append (a)
def append (a: array of int)
data.append_vals (a, a.length)
答案 1 :(得分:0)
精灵的错误?可能?
我在Vala中尝试过,工作正常。
输出:
1,2,3,4,55,666,
struct Int {
int[] data;
Int(int[] a){
this.data = a;
}
}
void main(){
var h = new HashTable<string, Int?> (str_hash, str_equal);
h["a"] = Int({1, 2, 3});
h["b"] = Int({4, 5, 6});
h["a"].data += 4;
h["a"].data += 55;
h["a"].data += 666;
for (var i = 0; i < h["a"].data.length; i++) {
stdout.printf("%d, ", h["a"].data[i]);
}
}