[英]How can a rust `new` method know which generic type of structure to return?
我正在學習 Rust 有一件事似乎不對
let vector: VecDeque<u32> = VecDeque::new();
new
方法如何知道要返回哪種類型的VecDeque
? 可以是任何T
的VecDeque<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.