Rustの特性に準拠する変数を定義するにはどうすればよいですか?

マトエ

をとる関数に渡す変数をインスタンス化したいと思いますT: Writeこれは次のように定義されます。

let outputFile = match matches.opt_str("o") {
    Some(fileName) => File::create(fileName).expect("could not open output file"),
    None => std::io::stdout()
};

現在、コンパイラーは、arms(Filevs Stdout。)のタイプが一致しないことについて文句を言います。私が欲しいのはoutputFileWriteトレイトから任意のメソッドを呼び出すことができるものとして宣言することだけです。

Rustでこれを実行できますか、それともこのmatch全体をパラメーターとしてその関数に渡す必要がありますか?

クリスエマーソン

トレイトを実装する2つ(またはそれ以上)の別々のタイプの1つを返したい場合は、トレイトオブジェクトを返す必要があります

この場合、オブジェクトを所有するために戻り値が必要です(そうしないと、Fileが終了する前に破棄されるmatchため)。したがって、を使用するのが理にかなっていますBox<dyn Write>&WriteおよびなどのトレイトオブジェクトBox<dyn Write>は「ファット」ポインタであり、構造体(FileまたはStdoutこの場合)へのポインタと、実装方法を説明するvtableへのポインタの両方が含まWriteます。重要なのはBox<dyn Write>&Write自動的にを実装することWriteです。

これが作業バージョン(遊び場)です:

fn get_writer(f: Option<&str>) -> Box<dyn Write> {
    match f {
        Some(file_name) => Box::new(File::create(file_name).expect("could not open output file")),
        None => Box::new(std::io::stdout()),
    }
}

私はあなたのコードからいくつかの変更を加えました:

  • Box<dyn Write>戻り値を追加しました(関数がないと、必要になる場合がありますlet outputFile: Box<dyn Write> = ...。型がどこかに定義されていないと、コンパイラは2つの型を共通に強制変換する必要があると推測できませんBox<dyn Write>。コンパイラが必要Box<dyn Write>あることがわかると、できる強要Box<File>しますBox<dyn Write>

  • 2つの結果を囲みました。

  • Rustの規則に一致fileNameするfile_nameように名前が変更れました(そして警告を消します)。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

クラスが特定の特性セットに完全に準拠しているかどうかを確認するにはどうすればよいですか?

分類Dev

プロトコルに準拠するオブジェクトの配列を定義するにはどうすればよいですか?

分類Dev

関連するタイプの特性境界を定義するにはどうすればよいですか?

分類Dev

特定の関連するタイプのプロトコルに準拠する変数を宣言するにはどうすればよいですか?

分類Dev

変数を定義するにはどうすればよいですか?

分類Dev

Rustの関数型の特性を配列の型に入れるにはどうすればよいですか?

分類Dev

変数の値を保持する「const」を定義するにはどうすればよいですか?

分類Dev

`Sequence`に準拠する型のカウントを取得するにはどうすればよいですか?

分類Dev

独自の識別子の値で文字列変数を定義するRustマクロを作成するにはどうすればよいですか?

分類Dev

すべてのPHPページに変数を定義するにはどうすればよいですか?

分類Dev

未定義の変数を定義するにはどうすればよいですか?

分類Dev

可変変数の特定の型を定義するにはどうすればよいですか?

分類Dev

Laravelのメール関数で$ to変数を定義するにはどうすればよいですか?

分類Dev

複数の列の変数を定義するにはどうすればよいですか

分類Dev

画面の幅に応じて変数を定義するにはどうすればよいですか?

分類Dev

Fnのような引数と戻り値の型で特性を定義するにはどうすればよいですか?

分類Dev

`IF`式の中でユーザー定義変数を使用するにはどうすればよいですか?

分類Dev

私のAjax URLでjavascript変数を定義するにはどうすればよいですか

分類Dev

独自の理解に準拠したscalaモナドを作成するにはどうすればよいですか?

分類Dev

変数をセージの行列として定義するにはどうすればよいですか?

分類Dev

このPython定義関数コードを変更するにはどうすればよいですか?

分類Dev

i18n準拠のEnumTypeAdapterを作成するにはどうすればよいですか?

分類Dev

標準型からユーザー定義型への変換を定義するにはどうすればよいですか?

分類Dev

npmの定義ファイルを準備するにはどうすればよいですか?

分類Dev

参照によって引数を取る特性関数を定義するにはどうすればよいですか?

分類Dev

Rustの特性を明確にするにはどうすればよいですか?

分類Dev

OkHttpClientをRESTAPIのレート制限に準拠させるにはどうすればよいですか?

分類Dev

関数型に準拠する通常の(非クロージャ)関数を宣言するにはどうすればよいですか?

分類Dev

Rで式を評価する前に、定義する必要のあるすべての変数を取得するにはどうすればよいですか?

Related 関連記事

  1. 1

    クラスが特定の特性セットに完全に準拠しているかどうかを確認するにはどうすればよいですか?

  2. 2

    プロトコルに準拠するオブジェクトの配列を定義するにはどうすればよいですか?

  3. 3

    関連するタイプの特性境界を定義するにはどうすればよいですか?

  4. 4

    特定の関連するタイプのプロトコルに準拠する変数を宣言するにはどうすればよいですか?

  5. 5

    変数を定義するにはどうすればよいですか?

  6. 6

    Rustの関数型の特性を配列の型に入れるにはどうすればよいですか?

  7. 7

    変数の値を保持する「const」を定義するにはどうすればよいですか?

  8. 8

    `Sequence`に準拠する型のカウントを取得するにはどうすればよいですか?

  9. 9

    独自の識別子の値で文字列変数を定義するRustマクロを作成するにはどうすればよいですか?

  10. 10

    すべてのPHPページに変数を定義するにはどうすればよいですか?

  11. 11

    未定義の変数を定義するにはどうすればよいですか?

  12. 12

    可変変数の特定の型を定義するにはどうすればよいですか?

  13. 13

    Laravelのメール関数で$ to変数を定義するにはどうすればよいですか?

  14. 14

    複数の列の変数を定義するにはどうすればよいですか

  15. 15

    画面の幅に応じて変数を定義するにはどうすればよいですか?

  16. 16

    Fnのような引数と戻り値の型で特性を定義するにはどうすればよいですか?

  17. 17

    `IF`式の中でユーザー定義変数を使用するにはどうすればよいですか?

  18. 18

    私のAjax URLでjavascript変数を定義するにはどうすればよいですか

  19. 19

    独自の理解に準拠したscalaモナドを作成するにはどうすればよいですか?

  20. 20

    変数をセージの行列として定義するにはどうすればよいですか?

  21. 21

    このPython定義関数コードを変更するにはどうすればよいですか?

  22. 22

    i18n準拠のEnumTypeAdapterを作成するにはどうすればよいですか?

  23. 23

    標準型からユーザー定義型への変換を定義するにはどうすればよいですか?

  24. 24

    npmの定義ファイルを準備するにはどうすればよいですか?

  25. 25

    参照によって引数を取る特性関数を定義するにはどうすればよいですか?

  26. 26

    Rustの特性を明確にするにはどうすればよいですか?

  27. 27

    OkHttpClientをRESTAPIのレート制限に準拠させるにはどうすればよいですか?

  28. 28

    関数型に準拠する通常の(非クロージャ)関数を宣言するにはどうすればよいですか?

  29. 29

    Rで式を評価する前に、定義する必要のあるすべての変数を取得するにはどうすればよいですか?

ホットタグ

アーカイブ