Zig 的文档显示了不同的错误处理方法,包括在调用堆栈中冒泡错误值、捕获错误并使用默认值、恐慌等。
我试图弄清楚如何重试提供错误值的函数。
例如,在下面的 ziglearn 代码片段中,如果用户输入的字符超过 100 个,是否可以重试 nextLine 函数?
fn nextLine(reader: anytype, buffer: []u8) !?[]const u8 {
var line = (try reader.readUntilDelimiterOrEof(
buffer,
'\n',
)) orelse return null;
// trim annoying windows-only carriage return character
if (@import("builtin").os.tag == .windows) {
return std.mem.trimRight(u8, line, "\r");
} else {
return line;
}
}
test "read until next line" {
const stdout = std.io.getStdOut();
const stdin = std.io.getStdIn();
try stdout.writeAll(
\\ Enter your name:
);
var buffer: [100]u8 = undefined;
const input = (try nextLine(stdin.reader(), &buffer)).?;
try stdout.writer().print(
"Your name is: \"{s}\"\n",
.{input},
);
}