Rust 锈是如何产生的';s类型推断是否跨多个语句工作?

Rust 锈是如何产生的';s类型推断是否跨多个语句工作?,rust,type-inference,Rust,Type Inference,Rust在相当高级的情况下执行类型推断。有人能解释(或指出)描述什么可以推断,什么不能推断的规则吗 第一个很简单:绑定的类型就是绑定表达式的类型: let n = 10u32; // Same as: // vvvvv let n: u32 = 10u32; 下一个更让我吃惊:右边的泛型参数是从左边的绑定类型推导出来的: let n: u32 = "10".parse().unwrap(); // same as: vvvvvvv let n: u32 = "10

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();
让n:u32=“10.parse().unwrap();
//同:VVVV
让n:u32=“10”。解析::().unwrap();
这也适用于泛型类型的“成员函数”:

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

// same as:
//        vvvvv      vvvvvvv
let b: Box<u32> = Box::<u32>::new(10u32);
让b=Box::new(10u32);
//同:
//vvvvvvv
设b:Box=Box:::新(10u32);
但最奇怪的是跨语句的类型推断:

let v = Vec::new();   // no type!
v.push(10u32);        // apparently v is Vec<u32>?!
// v.push(10i32);     // type error
让v=Vec::new();//没有类型!
v、 推动(10u32);//显然v是向量?!
//v.推动(10i32);//类型错误
类型推断和类型推断的规则是什么?

Rust使用类型系统。它是一组关于根据表达式的用法建立表达式类型的规则

关于它的正式描述和解释,请参见:


它基于。在中对实现进行了解释,但它已经过时了(仍然使用1.0之前的语法)。@kennytm:HM没有“语句”的概念,是吗?这如何解释像
vec?HM有
设x=e₁ 在e中₂
@KerrekSB:我一直认为它基本上是一个约束求解器(附带一些
Deref
奖金);“我担心,试图更多地指出它在未来很可能会过时。@MatthieuM.:是的,我可以看到它在实践中起作用的时间很长,它试图找出唯一有意义的类型分配,但我在任何地方都找不到系统的处理方法。”。像Box::new(5)这样的代码随处可见,但从来没有在任何地方说明为什么这样做有效。