Skip to content

结果 (Result) 类型与错误处理 ​

在玄铁语言中,没有传统的 try-catch 异常抛出机制(即不会因为一个错误导致整个程序崩溃)。相反,玄铁借鉴了 Rust 语言的优雅设计,使用 结果 (Result) 类型来显式处理可能失败的操作。

概念与底层结构 ​

结果 是一个内置的泛型数据容器。在底层的 C 运行时 (xt_runtime.h) 中,它被定义为一个名为 XTResult 的结构体,包含三个核心字段:

  1. 状态位 (is_success):标记这个结果是成功还是失败。
  2. 成功值 (value):如果成功,这里存储具体的返回值。
  3. 错误信息 (error):如果失败,这里存储错误原因(通常是一段字符串)。

如何创建 结果 ​

在代码中,你可以使用内置函数 成功() 和 失败() 来打包返回值:

xuantie
函 除法(a, b) {
    若 b == 0 {
        返 失败("除数不能为零")
    }
    返 成功(a / b)
}

如何消费 结果 ​

当你调用一个返回 结果 的函数时,你有两种处理方式:

方式一:手动解包(严谨) ​

xuantie
设 结 = 除法(10, 2)
若 结.成功 {
    示("计算结果: " + 结.值)
} 否 {
    示("发生错误: " + 结.错误)
}

方式二:使用错误冒泡操作符 ?(快捷) ​

如果你不想在每一层都写 若 结.成功,可以在表达式后加上 ? 操作符。

xuantie
设 值 = 除法(10, 2)? 
// 👆 编译器遇到 ? 会自动展开为:
// 如果成功,把 "值" 赋给左边;
// 如果失败,立刻终止当前函数,并将这个 "失败" 结果 return 给上一层调用者。

当然,你也可以这样写:

xuantie
设 值 = 除法(10, 2)
设 真值 = 值 ?
// ↑ 标识符允许以 ? 结尾(如 存在?),变量名与 ? 之间必须留空格,否则会被词法器读成一个标识符

基于 VitePress 静态构建 · 文档内容与仓库 GUIDE/ 同源

玄铁玄铁 XUANTIE · 中文系统级编程语言MARK 玄·折 120×120 · STROKE 8 · NO CURVES