try!入門 | Rust by Example
こちらのサンプルコードで
fn setup() -> std::io::Result<()> { let mut a = try!(File::create("a")); try!(a.write_all(b"grape")); let mut b = try!(File::create("b")); b.write_all(b"fruit") }
を実行すると
expected expression, found reserved keyword `try`
が出てしまいました。
環境
rustc 1.40.0
原因
サンプルコードは古いRustなのですが、今現在、新しい記法になっているためです。
対処方法
1. try!の代わりに「?」をつける
fn setup() -> std::io::Result<()> { let mut a = File::create("a")?; a.write_all(b"grape")?; let mut b = File::create("b")?; b.write_all(b"fruit") }
try!の代わりに「?」が導入されているので手軽にエラー処理を行うことができます。
2. try!の代わりに「r#try!」をつける
fn setup() -> std::io::Result<()> { let mut a = r#try!(File::create("a")); try!(a.write_all(b"grape")); let mut b = r#try!(File::create("b")); b.write_all(b"fruit") }
r#をつけることでtry!マクロをギリギリまだ使用できるみたいです。
感想
「?」便利だけどなんと呼べばいいのかわからないので「はてな」と呼べば良いのでしょうか?
tryが予約語になっていた理由ですが、
rfcs/2388-try-expr.md at master · rust-lang/rfcs · GitHub
ここに書いてあって、色々議論された故の予約語だったようです。