Stale translation: the English source changed after this draft. Treat the English edition as the authority.
本页是机器生成的草稿,尚未经人工审校。代码示例、命令和标识符保持英文。
数据与错误#
我显式表示集合和领域状态。选择一种让无效状态难以表达的类型。
数组与元组#
let values: array<int> = [10, 20, 30]
let first = (at values 0)
(array_set values 1 25)
let pair: (int, string) = (7, "seven")
let number = pair.0
数组有边界检查。有些数组函数会改写存储并返回 void;另一些返回新数组。查阅 Builtins,不要从熟悉的名字推断所有权。
结构体与枚举#
struct Point {
x: int
y: int
}
enum Direction {
North
South
East
West
}
let origin = Point { x: 0, y: 0 }
具名类型使用 UpperCamelCase。值和函数使用 snake_case。
联合与匹配#
union ParseResult {
Value(int)
Error(string)
}
fn unwrap_or(result: ParseResult, fallback: int) -> int {
return (match result {
Value(value) => value
Error(_) => fallback
})
}
shadow unwrap_or {
assert (== (unwrap_or Value(7) 0) 7)
assert (== (unwrap_or Error("bad") 3) 3)
}
对调用方可以处理的失败,使用 Result<T, E> 或其他显式联合。能恢复或补充上下文时匹配变体。后缀 ? 运算符会传播兼容的结果错误;需要清理或上下文时使用显式 match。
字符串与二进制字符串#
string 是文本。bstring 是带显式长度的二进制数据,可以包含零字节。转换和 Unicode 行为按内建函数或模块记载。不要假定字节下标就是 Unicode 字符下标。
集合#
内建数组和哈希表与以 C 为后端的集合模块是分开的。生成的 Builtins 页列出确切的内建拼写。生成的 Modules 页列出模块声明和原生构建边界。