簡體   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