2017-08-16 8 views
1

try!?マクロで私は極端な困難を抱えています。私はstraight from the rust-docsの下の例を持ち上げ、それはまだ私の顔に爆破する。疑問符の付いた標準文書の例はコンパイルされません

コード:

pub use std::fs::File; 
pub use std::io::prelude::*; 

fn main() { 
    let mut file: File = File::open("foo.txt")?; 
    file.write_all(b"Hello, world!")?; 
} 

がエラー:

error[E0277]: the trait bound `(): std::ops::Try` is not satisfied 
--> src/main.rs:6:23 
| 
6 |  let mut file: File = File::open("foo.txt")?; 
|       ---------------------- 
|       | 
|       the trait `std::ops::Try` is not implemented for `()` 
|       in this macro invocation 
| 
= note: required by `std::ops::Try::from_error` 

error[E0277]: the trait bound `(): std::ops::Try` is not satisfied 
--> src/main.rs:7:2 
| 
7 |  file.write_all(b"Hello, world!")?; 
|  --------------------------------- 
|  | 
|  the trait `std::ops::Try` is not implemented for `()` 
|  in this macro invocation 
| 
= note: required by `std::ops::Try::from_error` 

私はrustupによる錆の最新の安定版リリース(1.19.0)

答えて

1

にこれらの例です現在、を返す関数でラップされて実行されることが期待されています; Result S(File::createio::Write::write_all等)を返す関数は、心の中で可能なエラーで扱われるべきだからである(

fn main() { 
    use std::fs::File; 
    use std::io::prelude::*; 

    fn foo() -> std::io::Result<()> { 
     let mut file = File::create("foo.txt")?; 
     file.write_all(b"Hello, world!")?; 
     Ok(()) 
    } 
} 

:あなたが例の右上隅にある[実行]をクリックした場合、あなたはそれがに展開することを確認できますドキュメントの例では特に重要です)。 issuemain()? sがまだアクティブである可能にしても

は、すでにマージされた main()から Result帰国できるように RFCがありました。

関連する問題