类型推断 #
在大多数情况下,Move 编译器将能够推断类型参数,因此您不必显式写下它们。如果我们省略类型参数,上面的示例将如下所示:
fun foo() {
let x = id(true);
// ^ <bool> is inferred
let foo = Foo { x: true };
// ^ <bool> is inferred
let Foo { x } = foo;
// ^ <bool> is inferred
}
注意:当编译器无法推断类型时,您需要手动注释它们。一个常见的场景是调用一个类型参数只出现在返回位置的函数。
module my_addrx::TypeInference{
use std::vector;
fun foo() {
// let v = vector::empty();
// ^ The compiler cannot figure out the element type.
let v = vector::empty<u64>();
// ^~~~~ Must annotate manually.
}
}
但是,如果稍后在该函数中使用该返回值,编译器将能够推断出类型:
module my_addrx::TypeInference{
use std::vector;
fun foo() {
let v = vector::empty();
// ^ <u64> is inferred
vector::push_back(&mut v, 100);
}
}