Rust 为什么整型文字推断出的类型与它添加到的类型相同,而不是默认的整型类型i32?

Rust 为什么整型文字推断出的类型与它添加到的类型相同,而不是默认的整型类型i32?,rust,Rust,为什么变量no_type推断为i8,而不是i32(默认类型) x和y的类型是什么 fn main() { let x = 12; let y = 13; println!("{}", x + y); let z: i8 = 10; println!("{}", z + x); } 只有一个相关的实现涉及i8和非参考整数: impl Add<i8> for i8 { type Output = i8; } i32(默认类型) “

为什么变量
no_type
推断为
i8
,而不是
i32
(默认类型)


x
y
的类型是什么

fn main() {
    let x = 12;
    let y = 13;

    println!("{}", x + y);

    let z: i8 = 10;
    println!("{}", z + x);
}

只有一个相关的实现涉及
i8
和非参考整数:

impl Add<i8> for i8 {
    type Output = i8;
}
i32
(默认类型)

“默认”不是这个的最佳名称。它仅在类型推断无法确定具体类型时使用。因此,您经常会听到这种称为“回退”类型的方法

另见:


您已将一个操作数指定给
i8
,因此该类型将传播到其他变量。回答您的问题了吗?默认值仅在无法推断类型时使用。您看到了吗?非常感谢。我对生锈和堆垛溢出还不熟悉,我很惊讶ppl有多大的帮助been@r_duck如果你对它满意,你应该考虑一下。不管什么原因,安东尼奥。
impl Add<i8> for i8 {
    type Output = i8;
}
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`
}