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
类型推断和类型推导的规则是什么?
vec!
这样的东西呢? - Kerrek SBlet x = e₁ in e₂
。 - kennytmBox :: new(5)
这样的代码随处可见,但从未说明为什么会起作用。 - Kerrek SB