首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何修改Zig函数参数?

如何修改Zig函数参数?
EN

Stack Overflow用户
提问于 2022-10-11 00:48:48
回答 1查看 98关注 0票数 2

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

代码语言:javascript
运行
复制
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();    
}
EN

回答 1

Stack Overflow用户

发布于 2022-10-11 01:17:56

函数参数按设计是不可变的的:

结构、联合和数组有时可以更有效地作为引用传递,因为副本的开销可能取决于大小。当这些类型作为参数传递时,Zig可以选择按值复制和传递,或者通过引用传递,无论Zig决定哪种方式更快。这在一定程度上是因为参数是不可变的。

修改函数参数很容易导致意想不到的结果。如果参数是通过值传递的(复制了参数),则修改参数将不会修改原始值。

您在这里要做的是:将一个指针传递到您的哈希映射。例如。

代码语言:javascript
运行
复制
fn releaseDict(allocator: Allocator, dict: *std.StringHashMap(i16)) void {
    // ...
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74021886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档