gpt4 book ai didi

command-line-arguments - Zig:如何处理可选的错误联合类型? (例如,?std.process.NextError![:0]u8)

转载 作者:行者123 更新时间:2023-12-05 03:37:21 24 4
gpt4 key购买 nike

上下文

对这门语言很陌生,所以请多多包涵。我正在编写一个 super 基本函数来打印出传递给程序的命令行参数。这是关键逻辑:

    // already created allocator (std.heap.ArenaAllocator) and iterator (std.process.ArgIterator)

var idx: u16 = 0;
while (true) {
var arg = iterator.next(&allocator.allocator) catch |err| {
// ...
};
if (arg == null) {
print("End of arguments, exiting.", .{});
break;
}
print("Argument {d}: {s}", .{idx, arg});
idx += 1;
}

但是,我收到一条错误消息:

error: expected error union type, found '?std.process.NextError![:0]u8'
var arg = iterator.next(&allocator.allocator) catch |err| return err;

我认为这个问题与 NextError 返回一个可选 错误联合这一事实有关。不过,我不能确定,因为我还没有找到涵盖此特定案例的任何文档。

问题

我通过删除 catch 并假装返回类型的错误部分不存在来让这段代码工作。但问题是,捕获该错误的正确方法是什么?

最佳答案

您需要使用 .? 或将其放在 else 中并进行捕获:

    if (arg == null) {
print("End of arguments, exiting.", .{});
break;
}
print("Argument {d}: {s}", .{idx, arg.?});
idx += 1;

    if (arg) |a| {
print("Argument {d}: {s}", .{idx, a});
idx += 1;
} else {
print("End of arguments, exiting.", .{});
break;
}

关于command-line-arguments - Zig:如何处理可选的错误联合类型? (例如,?std.process.NextError![:0]u8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69361916/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com