Rust 结果的锈蚀类型推断
我是个新手,在浏览和运行一些代码时,我发现了一种奇怪的代码行为。我试图找到一些可以解释这一点的文档(如下所述)。有人能给我解释一下吗 问题陈述: 当我创建如下所示的单个变量时Rust 结果的锈蚀类型推断,rust,enums,Rust,Enums,我是个新手,在浏览和运行一些代码时,我发现了一种奇怪的代码行为。我试图找到一些可以解释这一点的文档(如下所述)。有人能给我解释一下吗 问题陈述: 当我创建如下所示的单个变量时 let testvariable = Ok(1); 我得到下面的错误 let testvariable = Ok(1); ------------ ^^ cannot infer type for type parameter `E` declared on the enum `Result` |
let testvariable = Ok(1);
我得到下面的错误
let testvariable = Ok(1);
------------ ^^ cannot infer type for type parameter `E` declared on the enum `Result`
|
consider giving `testvariable` the explicit type `std::result::Result<i32, E>`, where the type parameter `E` is specified
没有错误。Rust以某种方式推断出数组的类型为[std::result::result;2]
编辑:供观众试用的张贴代码
fn main() {
let testvariable = Ok(1);
let results = [Ok(1), Ok(3)];
let result: Result<Vec<_>, &str> = results.iter().cloned().collect();
}
我假设
Result::None
的变量值会自动转换为&str,但我找不到它。此外,关于enum关键字的注释并没有提供太多线索。我假设您的数组版本实际上来自以下示例:
let results=[Ok(1),Ok(3)];
let result:result=results.iter().cloned().collect();
//给我们答案的清单
断言!(Ok(vec![1,3]),结果);
编译器能够推断Result::Err
的类型与results
数组和Result
变量的类型相同。由于后者被指定为&str
,编译器也将其用于数组
对于单变量的情况,如果您从未使用错误变量,那么编译器将无法知道它是什么,并且会抱怨。感谢所有回答的人 我的新手大脑花了一段时间才明白答案,所以我在这里发布了一个详细的回复
Line 1: fn main() {
Line 2: let testvariable = Ok(1);
Line 3: let results = [Ok(1), Ok(3)];
Line 4: let result: Result<Vec<_>, &str> = results.iter().cloned().collect();
Line 5: }
我无法重现您的“无错误”案例:。请发布一篇解释您的问题的文章。类型可以根据以后的用法推断出来,其余的代码很重要。@GManNickG请尝试运行我上面发布的代码片段。
/// let x: Result<u32, &str> = Ok(2);
let results = [Ok(1), Ok(3)];
let result: Result<Vec<_>, &str> = results.iter().cloned().collect();
// gives us the list of answers
assert_eq!(Ok(vec![1, 3]), result);
Line 1: fn main() {
Line 2: let testvariable = Ok(1);
Line 3: let results = [Ok(1), Ok(3)];
Line 4: let result: Result<Vec<_>, &str> = results.iter().cloned().collect();
Line 5: }
Line 1: fn main() {
Line 2: let testvariable = Ok(1);
Line 3: let results = [Ok(1), Ok(3)];
Line 4: //let result: Result<Vec<_>, &str> = results.iter().cloned().collect();
Line 5: }