Mojo 中的参数是编译期变量,会在编译后成为运行时常量,声明在函数或结构体的方括号中;而放在圆括号中的函数实参是运行时值。很多语言把 parameter 与 argument 混用,在 Mojo 中二者是严格区分的概念。
comptime 关键字告诉编译器在编译期而非运行时完成求值。例如在循环前加上 comptime,编译器会在编译阶段展开该循环。
把某个值指定为参数后,编译器可以据此做针对性优化,因为这个值在运行期间不再改变。编译器会为该参数取值生成专有的函数版本,运行时的计算量因此减少。
结构体同样可以携带参数,从而依据参数值在编译期定义出该类型的不同变体。例如集合类型在声明时可指定元素类型,属于典型的参数化用法。
trait 是结构体特征的模板,结构体必须实现 trait 中的每一个要求才算符合该 trait。借助 trait,可以编写接受「任何符合某 trait 的类型」的参数化函数,而不必绑定到某个具体类型,编译器会在编译阶段校验该方法确实存在。