Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 默认为i32或i64_Rust - Fatal编程技术网

Rust 默认为i32或i64

Rust 默认为i32或i64,rust,Rust,我有来自实现的来创建我的类型,但奇怪的事情发生了: impl From for Object{ #[内联] fn from(i:i64)->Self{ 反对{ i:((i>13)+NAN_值作为usize-1+classSmallInteger)作为i64, } } } 对象的impl From{ #[内联] fn from(u:u64)->Self{ 反对{ i:((u作为usize)>13)+NAN_值作为usize-1+classSmallInteger)作为i64, } } } 对象的i

我有来自实现的
来创建我的类型,但奇怪的事情发生了:

impl From for Object{
#[内联]
fn from(i:i64)->Self{
反对{
i:((i>13)+NAN_值作为usize-1+classSmallInteger)作为i64,
}
}
}
对象的impl From{
#[内联]
fn from(u:u64)->Self{
反对{
i:((u作为usize)>13)+NAN_值作为usize-1+classSmallInteger)作为i64,
}
}
}
对象的impl From{
#[内联]
fn来自(i:i32)->Self{
反对{
i:((i>13)+NAN_值作为usize-1+classSmallInteger)作为i64,
}
}
}

我最初只有第一个,而且
Object::from(42)
工作得很好。然后我想添加一个从u64的转换,所以我添加了第二个定义。然后
Object::from(42_64)
工作了,但是所有我有文字的地方,比如42,都变成了i32s,并且我得到了错误,所以我添加了第三种情况,以及
Object::from(42)
再次起作用,但被解释为i32,正如@LambdaFairy和@Stargateur指出的那样,仍然类似于
1,第二个定义的添加使得整数常数推断不明确。以前,它们被推断为i64,但一旦不明确进入场景,它们就会根据返回到i32


如果编译器告诉我推断是不明确的,那就太好了,但至少我现在明白了。

Rust的行为是(a)在不明确时匹配预期的类型,或者(b)默认为
i32
。当您添加第二个
impl
时,它引入了模糊性,从而导致行为(b)。这回答了你的问题吗?@LambdaFairy no是模糊性rust编译错误,这只是规则整数在不受约束时默认为i32。如果你问我,这是一个有争议的rust。谢谢@LambdaFairy和Stargateur。我现在理解模糊性会导致回退。我认为如果编译器明确声明它是模糊的,那会更好。不必担心@DaveMason。请随意提出问题,或者在Twitter上ping ekuber——毫无帮助的诊断被认为是一个bug。