Rust中std::convert::try_into为何将u16转换为i32?
Rust类型推断:为什么
b.try_into()会自动转为i32? 我正在学习Rust,以下是书中的示例代码:
use std::convert::TryInto; fn main() { let a: i32 = 10; let b: u16 = 100; let b_ = b.try_into() .unwrap(); if a < b_ { println!("Ten is less than one hundred."); } }
作者提到b.try_into()会将b转换为i32,但代码中并未显式指定b_的类型,为何u16类型的b会被转换为i32而非u32等其他类型?
这是Rust的类型推断机制在起作用,编译器会根据代码上下文自动推导变量的目标类型,核心原因在于后续的比较操作:
- 变量
a的类型是明确的i32,而Rust的比较运算符要求左右操作数的类型必须完全一致。 - 当编译器解析到
a < b_这一行时,会反向推导b_的类型必须和a匹配,也就是i32。 - 因此
try_into()会自动以i32作为目标类型进行转换,而不是u32或其他类型。
如果移除这个比较上下文,比如单独声明let b_ = b.try_into().unwrap();,编译器就会因为无法确定目标类型而报错,这时就必须显式指定b_的类型,比如let b_: u32 = b.try_into().unwrap();。
内容的提问来源于stack exchange,提问作者IamShifu
相关产品推荐
相关产品推荐

