繁体   English   中英

rust `new` 方法如何知道要返回哪种通用类型的结构?

[英]How can a rust `new` method know which generic type of structure to return?

我正在学习 Rust 有一件事似乎不对

let vector: VecDeque<u32> = VecDeque::new();

new方法如何知道要返回哪种类型的VecDeque 可以是任何TVecDeque<T> 我来自 C++,如果有一个 static new方法,它必须被模板化,我必须像这样调用: CppObject<int> cppObject = CppObject<int>()例如。

Rust 做了很多类型推断。 在这种情况下,它知道调用VecDeque::<u32>::new()因为您明确指定要将其分配给VecDeque<u32>类型的变量,并且您可以到达那里的唯一方法是调用与VecDeque<u32>类型完全相同的关联方法new()

请注意,如果您没有注释vector的类型,它将无法编译:

use std::collections::VecDeque;

fn main() {
    let vector = VecDeque::new();
}
error[E0282]: type annotations needed for `std::collections::VecDeque<T>`
 --> src/main.rs:4:18
  |
4 |     let vector = VecDeque::new();
  |         ------   ^^^^^^^^^^^^^ cannot infer type for type parameter `T`
  |         |
  |         consider giving `vector` the explicit type `std::collections::VecDeque<T>`, where the type parameter `T` is specified

但是,如果之后有操作明确VecDeque元素的类型为u32 ,编译器也会成功推断类型:

use std::collections::VecDeque;

fn main() {
    let mut vector = VecDeque::new(); // type not yet known
    vector.push_back(123);            // append untyped integer, type not yet known

    let expected: u32 = 123;
    assert_eq!(vector[0], expected); // A-ha! vector[0] returns T
                                     // and T is compared with u32,
                                     // so it must follow that T is u32
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM