Ziglings 笔记 34: 阶段性测验 4 - 修复打印逻辑
找回丢失的输出
在 Ziglings 的第 34 个练习(Quiz 4)中,我们面对的是一个无法工作的程序。 它的目标很简单:获取一个数字(42)并打印出来。但是,用来打印的代码看起来非常奇怪,甚至有点“像其他语言”的写法。
解决方案
我不去动那个奇怪的 getNumber 函数(题目要求),只修复 main 函数:
const std = @import("std");
const NumError = error{IllegalNumber};
pub fn main() !void {
var stdout = std.fs.File.stdout().writer(&.{});
// 这行是正确的:使用 try 解包 result 或者抛出错误
const my_num: u32 = try getNumber();
try stdout.interface.print("my_num={}\n", .{my_num});
}
// 题目要求不修改此函数
fn getNumber() NumError!u32 {
if (false) return NumError.IllegalNumber;
return 42;
}
核心知识点回顾
try 的解包能力
再次复习一下 try 的作用:
const val = try func();
这一行代码做了两件事:
- 控制流:如果
func()报错,当前函数直接返回该错误。 - 数据流:如果
func()成功,将结果赋值给val。 这使得my_num变成了纯净的u32,而不是带错误的联合类型。
后续预告:我们已经通过了所有的基础测验!接下来,我们将进入 Zig 数据类型的深水区——枚举 (Enums)。它比 C 语言的枚举要强大得多。