结果<usize,std :: io :: error :: error =“”>未在Rust 1.0.0中实现expect

时间:2016-09-22 20:13:30

标签: rust

在“猜测游戏”教程示例(here)中,我的编译器给出了以下错误,我将其解释为expectread_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操场上运行相同的代码,它似乎运行正常,所以它可能在我的环境中,但我不能想到它可能是什么。

其他可能相关的信息:

  • 我支持重新签署SSL证书的公司代理,因此rust-lang网站推荐的安装脚本不起作用
  • 我使用rust-1.0.0-x86_64-pc-windows-gnu.msi
  • 安装
  • 我正在使用上述“1.0.0”安装程序中包含的货物
  • 我手动将生锈和货物的路径添加到我的环境PATH
  • 我在64位Windows 7上使用cygwin

TL; DR

我需要更改什么才能在我的环境中编译expect()行?

2 个答案:

答案 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)中引入。