2017-09-03 8 views
0
use std::io; 
use std::fs::File; 
use std::io::prelude::*; 

fn main() { 
    let mut csv = File::open("Item.csv")?; 
} 

これは私のコードの一部である、と私はエラーを持っている:さびエラー「バインド形質が成立していない」

Compiling eracsv v0.1.0 (file:///C:/Users/jwm/Project/eracsv) 
error[E0277]: the trait bound `(): std::ops::Try` is not satisfied 
--> src\main.rs: 
    | 
    |  let mut csv = File::open("Item.csv")?; 
    |     ----------------------- 
    |     | 
    |     the `?` operator can only be used in a function that returns `Result` (or another type that implements `std::ops::Try`) 
    |     in this macro invocation 
    | 
    = help: the trait `std::ops::Try` is not implemented for `()` 
    = note: required by `std::ops::Try::from_error` 

私は安定したrustc 1.19の両方との契約を持っています夜間は1.22となり、両方とも同じエラーが出る。

しかし、これはrust docとまったく同じコードですね。 File :: open()関数がresultを返すことは明示的に言及されています。

私は好奇心が強いのですか? unwrap()はコンパイルエラーです。

答えて

1

()(これはmain関数)を返す関数の内部で?演算子を使用しているというエラーメッセージが実際に表示されます。 ?オペレータは、エラーを上に伝播しますが、実際に使用されている関数がそのエラーを表す可能性のある互換性のある戻り値の型を持っている場合にのみ実行できます。

つまり、互換性のあるエラータイプのResultを返す関数でのみ使用できます。 mainResultを返さないため、内部で?演算子を使用することはできません。

また、(あなたがmainResult返すことを宣言することを可能にすることによって)main?の使用を許可することになる、RFC 1937に興味があるかもしれません。

+0

私は錆の中でtryステートメントをキャッチしていない結果を返します!ありがとう! –

関連する問題