[英]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
類型推斷和類型推導的規則是什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.