Rust by Example

16.6 Resultのエイリアス

特定のResult型が何度も何度も使用されると何が起きるでしょう?正解は「型名を書き下すのがすぐに面倒になる」です。このような場合は特定のResultのジェネリックエイリアスを定義すると吉です。

use std::num::ParseIntError; use std::result; // `ParseIntError`を`Err`の型として持つ全ての`Result`のジェネリックエイリアス type Result<T> = result::Result<T, ParseIntError>; // 上で定義したエイリアス(この場所特有の`Result`型)を使用 fn double_number(number_str: &str) -> Result<i32> { number_str.parse::<i32>().map(|n| 2 * n) } // もう一度使用。エイリアスによって再度明記する必要性がない。 fn print(result: Result<i32>) { match result { Ok(n) => println!("n is {}", n), Err(e) => println!("Error: {}", e), } } fn main() { print(double_number("10")); print(double_number("t")); }

これはモジュールのレベルでは特に役立ちます。というのも特定のモジュールで見つかるエラーは同じErr型(そのモジュール内の全てのResultを完結に表現する唯一のエイリアス)を持つ可能性があるからです。これは本当に有用なので標準ライブラリ内にもその例があります。IOエラー全般を代表するio::Resultです。

訳注: ピンと来ない方はPython プログラマーのための Rust 入門が参考になるかもしれません。

See also:

Resultio::Result