簡體   English   中英

Rust 的類型推斷如何跨多個語句工作?

[英]How does Rust's type inference work across multiple statements?

Rust 在相當高級的情況下執行類型推斷。 有人可以解釋(或指出)描述可以推斷和不能推斷的規則嗎?

第一個很簡單:綁定的類型就是綁定表達式的類型:

let n = 10u32;

// Same as:
//   vvvvv
let n: u32 = 10u32;

下一個讓我更驚訝的是:右邊的泛型參數是從左邊的綁定類型推導出來的:

let n: u32 = "10".parse().unwrap();

// same as:            vvvvvvv
let n: u32 = "10".parse::<u32>().unwrap();

這也適用於泛型類型的“成員函數”:

let b = Box::new(10u32);

// same as:
//        vvvvv      vvvvvvv
let b: Box<u32> = Box::<u32>::new(10u32);

但最奇怪的是跨語句的類型推斷:

let v = Vec::new();   // no type!
v.push(10u32);        // apparently v is Vec<u32>?!
// v.push(10i32);     // type error

類型推斷和類型推導的規則是什么?

Rust 使用Hindley-Milner類型系統。 它是一組關於根據用法建立表達式類型的規則。

可以在那里找到它的正式描述和解釋:

“你不明白欣德利-米爾納的哪一部分?”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM