为什么变量no_type
推断为i8
而不推断为i32
(默认类型)?
fn main() {
let no_type = 25;
let int8: i8 = 10;
let sum = no_type + int8;
println!("{} + {} = {}", no_type, int8, sum);
}
x
和y
的类型是什么?
fn main() {
let x = 12;
let y = 13;
println!("{}", x + y);
let z: i8 = 10;
println!("{}", z + x);
}
答案 0 :(得分:4)
只有Add
的一个相关实现涉及i8
和非引用整数:
impl Add<i8> for i8 {
type Output = i8;
}
这意味着,为了能够编译代码,如果已知添加的一侧是i8
,则另一方也必须是i8
。自 {integer}
doesn't have a type yet起,它可以自由变化,编译器会为其分配fn main() {
let a = 1;
let b = 1 + a;
let c = 1 + b;
let d = 1 + c;
let e = 1 + d;
let f = 1 + e;
let g = 1 + f;
let sum = g + 1i8;
let _: () = a; // found type `i8`
let _: () = sum; // found type `i8`
}
类型。
这适用一次(如在第一个代码块中),两次(如在第二个代码块中),或适用的次数:
i32
{{1}}(默认类型)
&#34;默认&#34;并不是最好的名字。当类型推断无法确定具体类型时,它只使用。因此,您经常会听到这种称为&#34;后退&#34;类型。
另见: