1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
/// # 类型推导 /// /// Base usage: 正常推导 /// /// ``` /// fn sum(a: u32, b: i32) -> u32 { /// a + (b as u32) /// } /// fn infer_demo() { /// let a = 1; /// let b = 2; /// assert_eq!(sum(a, b), 3); // a和b的类型会自动推断为i32 /// let elem = 5u8; /// let mut vec = Vec::new(); /// vec.push(elem); // vec 类型会自动推断为 u8 /// assert_eq!(vec, [5]); /// } /// infer_demo(); /// ``` /// /// Base usage: 无法推导的情况 /// /// ``` /// let x = "1"; /// println!("{:?}", x.parse().unwrap()); /// ``` /// /// Base usage: 解决无法推导的情况 /// /// ``` /// let x = "1"; /// println!("{:?}", x.parse::<i32>().unwrap()); /// ``` /// /// Base usage: 另一种类型无法推导的情况 /// /// ``` /// let a = 0; /// let a_pos = a.is_positive(); // error`[E0599]`: no method named `is_positive` found for type `{integer}` in the current scope /// ``` pub fn infer_demo() { let a = 1; let b = 2; assert_eq!(sum(a, b), 3); let elem = 5u8; let mut vec = Vec::new(); vec.push(elem); assert_eq!(vec, [5]); } fn sum(a: u32, b: i32) -> u32 { a + (b as u32) }