我可以创建任何类型的向量,如下所示:
let mut vec: Vec<u32> = Vec::new();
如何new()
当(与 C++ 不同)未使用类型名称参数化时,知道所请求的向量元素类型是什么吗?
另一方面:我可以明确指定类型吗?
这似乎无法编译:
let mut vec = Vec<u32>::new();
Rust 编译器使用(稍作修改)Hindley-Milner 类型推理算法。基本上,您在源代码中提供的所有类型信息都用作未绑定泛型类型参数的约束,然后约束求解器尝试找出所有未知数。在分配的情况下
let vec: Vec<u32> = Vec::new();
右侧有一个未绑定的泛型类型参数 –T
的参数Vec<T>
。编译器会记住尚未确定的未绑定类型参数。通过查看原型Vec::new()
,编译器可以看到它返回Vec<T>
,所以右侧的表达式具有类型Vec<T>
, with T
仍处于解绑状态。根据左侧的类型注释,编译器知道该类型应该是Vec<u32>
,因此可以推断T
必须是u32
.
这是一个比较简单的案例。约束求解器还能够处理更复杂的情况。
您可以使用“turbofish”运算符显式指定右侧的类型::<>
:
let vec = Vec::<u32>::new();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)