结果 (Result) 类型与错误处理
在玄铁语言中,没有传统的 try-catch 异常抛出机制(即不会因为一个错误导致整个程序崩溃)。相反,玄铁借鉴了 Rust 语言的优雅设计,使用 结果 (Result) 类型来显式处理可能失败的操作。
概念与底层结构
结果 是一个内置的泛型数据容器。在底层的 C 运行时 (xt_runtime.h) 中,它被定义为一个名为 XTResult 的结构体,包含三个核心字段:
- 状态位 (
is_success):标记这个结果是成功还是失败。 - 成功值 (
value):如果成功,这里存储具体的返回值。 - 错误信息 (
error):如果失败,这里存储错误原因(通常是一段字符串)。
如何创建 结果
在代码中,你可以使用内置函数 成功() 和 失败() 来打包返回值:
xuantie
函 除法(a, b) {
若 b == 0 {
返 失败("除数不能为零")
}
返 成功(a / b)
}如何消费 结果
当你调用一个返回 结果 的函数时,你有两种处理方式:
方式一:手动解包(严谨)
xuantie
设 结 = 除法(10, 2)
若 结.成功 {
示("计算结果: " + 结.值)
} 否 {
示("发生错误: " + 结.错误)
}方式二:使用错误冒泡操作符 ?(快捷)
如果你不想在每一层都写 若 结.成功,可以在表达式后加上 ? 操作符。
xuantie
设 值 = 除法(10, 2)?
// 👆 编译器遇到 ? 会自动展开为:
// 如果成功,把 "值" 赋给左边;
// 如果失败,立刻终止当前函数,并将这个 "失败" 结果 return 给上一层调用者。当然,你也可以这样写:
xuantie
设 值 = 除法(10, 2)
设 真值 = 值 ?
// ↑ 标识符允许以 ? 结尾(如 存在?),变量名与 ? 之间必须留空格,否则会被词法器读成一个标识符