Parsing 编译器是否足够聪明,可以推断出解析后的值';s类型基于值';在需要该类型的函数中的用法是什么?

Parsing 编译器是否足够聪明,可以推断出解析后的值';s类型基于值';在需要该类型的函数中的用法是什么?,parsing,rust,type-inference,Parsing,Rust,Type Inference,我在以下位置找到此代码: Rust编译器是否真的足够聪明,能够推断出持有IP地址的字符串应该解析到的类型是std::net::SocketAddr,因为解析后的变量被传递给需要该类型的bind方法?您为什么不需要呢?首先使用变量的后续用法来推断其类型是非常明智的。在一个极其简单的例子中也可以看出这一点: fn foo(v: Vec<i16>) { println!("{:?}", v); } fn main() { let mut numbers = vec![];

我在以下位置找到此代码:

Rust编译器是否真的足够聪明,能够推断出持有IP地址的字符串应该解析到的类型是
std::net::SocketAddr
,因为解析后的变量被传递给需要该类型的bind方法?您为什么不需要呢?

首先使用变量的后续用法来推断其类型是非常明智的。在一个极其简单的例子中也可以看出这一点:

fn foo(v: Vec<i16>) {
    println!("{:?}", v);
}

fn main() {
    let mut numbers = vec![]; // Let's make a Vec<_>
    numbers.push(12345);      // Let's push a number (of an unknown type) to it
    foo(numbers);             // A-ha! It is passed to a function requiring a Vec<i16>. 
                              // That means `numbers` is Vec<i16>
                              // and the constant 12345 is of type i16.
}
fn-foo(v:Vec){
println!(“{:?}”,v);
}
fn main(){
让mut number=vec![];//让我们做一个vec
numbers.push(12345);//让我们向它推一个(未知类型的)数字
foo(numbers);//A-ha!它被传递给需要Vec的函数。
//这意味着“数字”是向量
//常数12345为i16型。
}
另请参见

首先使用变量的后续用法来推断其类型是非常明智的。在一个极其简单的例子中也可以看出这一点:

fn foo(v: Vec<i16>) {
    println!("{:?}", v);
}

fn main() {
    let mut numbers = vec![]; // Let's make a Vec<_>
    numbers.push(12345);      // Let's push a number (of an unknown type) to it
    foo(numbers);             // A-ha! It is passed to a function requiring a Vec<i16>. 
                              // That means `numbers` is Vec<i16>
                              // and the constant 12345 is of type i16.
}
fn-foo(v:Vec){
println!(“{:?}”,v);
}
fn main(){
让mut number=vec![];//让我们做一个vec
numbers.push(12345);//让我们向它推一个(未知类型的)数字
foo(numbers);//A-ha!它被传递给需要Vec的函数。
//这意味着“数字”是向量
//常数12345为i16型。
}
另见