在“猜测游戏”教程示例(here)中,我的编译器给出了以下错误,我将其解释为expect
上read_line
不存在Result
。
error: type `core::result::Result<usize, std::io::error::Error>` does not implement any method in scope named `expect`
违规代码:
use std::io;
fn main() {
println!("**********************");
println!("***Guess the number***");
println!("**********************");
let mut guess = String::new();
io::stdin()
.read_line(&mut guess)
.expect("Failed to read line"); //<<-- error on this line
//let guess_result=io::stdin().read_line(&mut guess);
println!("You guessed: {}", guess);
// println!("Result: {}", guess_result.is_ok());
}
我可以使用.expect()
删除这些行,并使用上面的注释行并使其正常工作。我担心的是,io::stdin().read_line
的结果类型似乎是core::result::Result
,而不是教程中提到的std::io::Result
。
如果我在Rust操场上运行相同的代码,它似乎运行正常,所以它可能在我的环境中,但我不能想到它可能是什么。
其他可能相关的信息:
rust-1.0.0-x86_64-pc-windows-gnu.msi
PATH
TL; DR
我需要更改什么才能在我的环境中编译expect()
行?
答案 0 :(得分:7)
Rust 1.0于2015-05-15发布,超过一年。虽然Rust 1.x的目标是向后兼容性(在Rust 1.x上编写的代码应该适用于Rust 1.(x + 1)),但不的目标是< em>转发兼容性(在Rust 1.x上编写的代码应该适用于Rust 1.(x-1))。
如果您仅限于Rust 1.0,那么阅读Rust 1.11(当前版本)的文档并不是最有用的。
最佳下注是update to the newest version of Rust。
话虽如此,documentation for Rust 1.0 is available online(我想你也有本地安装的副本)。检查the guessing game,我们看到:
io::stdin()
.read_line(&mut guess)
.ok()
.expect("Failed to read line");
也就是说,我们将Result
转换为Option
。检查Result
in 1.0.0的API,我们可以看到它确实没有expect
方法。
如果查看current docs for Result::expect
,可以看到它是在Rust 1.4中引入的。
答案 1 :(得分:1)
expect()
的{{1}}方法仅在Rust 1.4.0(source)中引入。