变量与类型
绑定(let/var)、类型注解,以及主要内建类型。
变量与类型
Sounio 是静态类型语言,大多数局部绑定都可以进行类型推断。
变量声明
不可变变量(let)
默认情况下,变量是不可变的:
let x = 42 // Type inferred as i32
let name = "Alice" // Type inferred as string
let pi = 3.14159 // Type inferred as f64
可变变量(var)
需要可变时使用 var:
var counter = 0
counter = counter + 1 // OK
let fixed = 10
fixed = 20 // Error: cannot assign to immutable variable
类型注解
你可以显式标注类型:
let x: i32 = 42
let ratio: f64 = 0.5
let flag: bool = true
let message: string = "Hello"
基本类型
| 类型 | 说明 | 示例 |
|---|---|---|
i8, i16, i32, i64 | 有符号整数 | let x: i32 = -42 |
u8, u16, u32, u64 | 无符号整数 | let y: u32 = 42 |
f32, f64 | 浮点数 | let pi: f64 = 3.14 |
bool | 布尔值 | let flag: bool = true |
char | Unicode 字符 | let c: char = 'A' |
string / String | 字符串 | let s = "hello" |
str | 借用的字符串切片 | let s: &str = "hello" |
复合类型
元组
let point = (10, 20)
let first = point.0 // 10
let second = point.1 // 20
数组
let numbers: [i32; 5] = [1, 2, 3, 4, 5]
let first = numbers[0] // 1
向量(Vec<T>)
let items: Vec<i32> = [1, 2, 3, 4]
for x in items {
// ...
}
类型推断
Sounio 会根据上下文推断类型:
let values = [1, 2, 3] // Array literal
let vec_values: Vec<i32> = values
规范说明: 单位(units)可以解析(例如
unit kg; unit g = 0.001 * kg; unit mg = 0.001 * g;),但完整的单位检查可能只在部分编译器模式/特性开关下启用。
认识论类型(Knowledge<T>)
用于携带不确定性的值:
let k = Knowledge { value: 42.0 }
let x: f64 = k.unwrap("accepted for demo")
更多内容见 Knowledge Types。