Eri*_*eim 7 function parameter-passing zig
我发现 Zig 函数参数是恒定的。这意味着我释放 a 的幼稚功能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();
}
Run Code Online (Sandbox Code Playgroud)
你不知道。函数参数在设计上是不可变的:
结构体、联合和数组有时可以更有效地作为引用传递,因为根据大小,副本可能会任意昂贵。当这些类型作为参数传递时,Zig 可以选择按值复制和传递,或按引用传递,无论 Zig 决定哪种方式都会更快。这在一定程度上是由于参数是不可变的这一事实而成为可能的。
修改函数参数很容易导致意想不到的结果。如果参数按值传递(创建其副本),则修改它不会修改原始值。
您在这里要做的是:传递一个指向您的哈希映射的指针。例如
fn releaseDict(allocator: Allocator, dict: *std.StringHashMap(i16)) void {
// ...
}
Run Code Online (Sandbox Code Playgroud)