单位(Units)
定义并跟踪单位,减少维度分析错误。
单位(Units)
Sounio 提供了 单位(units of measure) 的专用语法,使程序可以通过类型系统携带物理维度含义。
单位声明
单位在顶层声明,当前需要以 ; 结尾:
unit kg;
unit g = 0.001 * kg;
unit mg = 0.001 * g;
单位可以通过乘法、除法与指数进行组合:
unit m;
unit s;
unit N = kg * m / s^2;
量(数值 + 单位)
编译器支持 quantity 类型形式:
Quantity[f64, mg]
Quantity[f64, kg*m/s^2]
要给数值字面量赋予单位类型,可使用 @:
unit kg;
unit g = 0.001 * kg;
unit mg = 0.001 * g;
fn main() {
let dose: Quantity[f64, mg] = 500.0@Quantity[f64, mg]
let half = 250.0@Quantity[f64, mg]
let total = dose + half
}
规范 vs 实现
长期目标是编译期单位检查与转换,防止不匹配(例如不能把长度和质量相加)。
目前,单位与 quantity 类型可以解析并表示,但 完整的不匹配检查可能尚未在所有编译器模式中强制。在单位检查器端到端集成之前,建议把单位当作一种正确性注解来使用。