我如何修改Zig函数参数?

5

我发现Zig函数参数是常量。这意味着我的释放HashMap的天真函数不起作用。你可以在这里看到代码示例。我想知道最正确的Zig方式是否是将dict作为函数传递,或者是否有其他方法可以使参数可变。

const Dict = std.StringHashMap;

fn releaseDict(allocator: Allocator, dict:  Dict(i16)) void {
    var iter = dict.iterator();
    while (iter.next()) |entry|
        allocator.free(entry.key_ptr.*);
    dict.deinit();    
}

答案是:使用指针 - sigod
1个回答

8
您不需要这样做。函数参数在设计上是不可变的:
结构体、联合体和数组有时可以更高效地作为引用传递,因为复制可能会根据大小任意昂贵。当这些类型作为参数传递时,Zig 可能会选择复制并按值传递,或者按引用传递,无论 Zig 决定哪种方式更快。这在一定程度上得以实现,部分原因是参数是不可变的。
修改函数参数很容易导致意外结果。如果参数按值传递(即复制它),则修改它不会修改原始值。
您想要做的是:将指向哈希表的指针传递给函数。例如:
fn releaseDict(allocator: Allocator, dict: *std.StringHashMap(i16)) void {
    // ...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接