# 结果 (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)
设 真值 = 值 ?
// ↑ 标识符允许以 ? 结尾(如 存在?),变量名与 ? 之间必须留空格,否则会被词法器读成一个标识符
```