互いに素な構造体フィールドへの可変参照を取得するためのより良い方法はありますか?

crhino

かなり臭いことがわかったRustコードがいくつかあります。構造体のフィールドから同時に可変参照を取得したいのですが、もちろんRustは同時に複数の可変参照を許可していません。

私が現在行っているのは、基本的に新しいタイプのタプルを作成し、2つの異なるタイプを別々のref mutパターンにパターンマッチングすることです。これが実際にどのように見えるかについての大ファンではありません。

struct Foo;

impl Foo {
    fn foo(&mut self, bar: &mut Bar) {
        bar.bar();
    }
}

struct Bar;

impl Bar {
    fn bar(&mut self) {
        println!("bar")
    }
}

struct FooBar((Foo, Bar));

impl FooBar {
    fn foobar(&mut self) {
        let &mut FooBar((ref mut foo, ref mut bar)) = self;
        foo.foo(bar);
        println!("foobar");
    }
}

fn main() {
    let mut foobar = FooBar((Foo, Bar));
    foobar.foobar();
}

さび遊び場

私がこれを行うべきより良い方法はありますか?または、この新しいタイプを必要としないようにコードを構造化する一般的な方法に関するいくつかのアイデアはありますか?

マシューM。

Rustの借用分析は、互いに素なフィールドの借用をネイティブにサポートします。

タプルのようなものstructまたは通常のいずれかを使用でき、structすべてが正常に機能します。

struct Foo;

impl Foo {
    fn foo(&mut self, bar: &mut Bar) {
        bar.bar();
    }
}

struct Bar;

impl Bar {
    fn bar(&mut self) {
        println!("bar")
    }
}

struct Tupled(Foo, Bar);

impl Tupled {
    fn foobar(&mut self) {
        self.0.foo(&mut self.1);
    }
}

struct Named {
    foo: Foo,
    bar: Bar,
}

impl Named {
    fn foobar(&mut self) {
        self.foo.foo(&mut self.bar);
    }
}

fn main() {
    let mut tupled = Tupled(Foo, Bar);
    tupled.foobar();

    let mut named = Named{ foo: Foo, bar: Bar };
    named.foobar();
}

これはコンパイルされ、プレイグラウンドで実行さます。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

特定のフィールドを持つベクトルを取得するためのより良い方法は、構造体のベクトルを形成しますか?

分類Dev

構造体Cのすべての変数を変更するためのより良い方法はありますか

分類Dev

C ++ / Qtの構造体のフィールドに文字列を変換する方法はありますか?

分類Dev

JSONに構造体のフィールドを動的に含めたり除外したりするにはどうすればよいですか?

分類Dev

jsonペイロードで特定の構造体属性を公開しないための良い方法はありますか?

分類Dev

マクロで構造体のフィールド名を取得する方法はありますか?

分類Dev

変数をブレードに送信するためのより良い方法はありますか?

分類Dev

構造体を初期化するためのより保守しやすい方法はありますか?

分類Dev

jsonマップを構造体に抽出するためのより良い方法

分類Dev

Rust構造体の変数を初期化するためのより速い/より短い方法はありますか?

分類Dev

複数の構造体フィールドを同時に変更するための最も速い慣用的な方法は何ですか?

分類Dev

構造体へのポインタを持つ構造体フィールドを取得するにはどうすればよいですか?

分類Dev

特定の範囲の可変リストを作成するためのより良い方法はありますか?

分類Dev

特定の範囲の可変リストを作成するためのより良い方法はありますか?

分類Dev

OracleCommandを構築するためのより良い方法はありますか?

分類Dev

HaskellのASTに属性フィールドを追加するより良い方法はありますか?

分類Dev

アダプターから親RecyclerViewへの参照を取得するより良い方法はありますか?

分類Dev

CFMLでコレクション(構造体)をループするより良い方法はありますか?

分類Dev

構造体への管理された参照が与えられた場合、オフセットでフィールドへの管理された参照を取得するにはどうすればよいですか?

分類Dev

このPHPファイル関数を使用するためのより短い/よりクリーンな/より良い方法はありますか?

分類Dev

結果をフィルタリングするためのより単純なSQLクエリまたはより良い方法はありますか?

分類Dev

フィボナッチ数列を印刷するためのより良いコードはありますか?

分類Dev

可変フィールドと不変フィールドの両方で構造体を初期化するにはどうすればよいですか?

分類Dev

構造体を埋め込みますが、jsonには特定のフィールドしかありません

分類Dev

グローバル変数を定義するためのより良い方法はありますか?

分類Dev

構造体をフィールドの少ない別の構造体に変換する方法

分類Dev

タッチアンドエコーを使用する以外に、bashでファイルを作成するためのより良い方法はありますか?

分類Dev

AWS Athenaの構造体フィールドをフラット化する方法はありますか?

分類Dev

SQLAlchemyKeyedTupleから特定のフィールドを取得するためのより良い方法

Related 関連記事

  1. 1

    特定のフィールドを持つベクトルを取得するためのより良い方法は、構造体のベクトルを形成しますか?

  2. 2

    構造体Cのすべての変数を変更するためのより良い方法はありますか

  3. 3

    C ++ / Qtの構造体のフィールドに文字列を変換する方法はありますか?

  4. 4

    JSONに構造体のフィールドを動的に含めたり除外したりするにはどうすればよいですか?

  5. 5

    jsonペイロードで特定の構造体属性を公開しないための良い方法はありますか?

  6. 6

    マクロで構造体のフィールド名を取得する方法はありますか?

  7. 7

    変数をブレードに送信するためのより良い方法はありますか?

  8. 8

    構造体を初期化するためのより保守しやすい方法はありますか?

  9. 9

    jsonマップを構造体に抽出するためのより良い方法

  10. 10

    Rust構造体の変数を初期化するためのより速い/より短い方法はありますか?

  11. 11

    複数の構造体フィールドを同時に変更するための最も速い慣用的な方法は何ですか?

  12. 12

    構造体へのポインタを持つ構造体フィールドを取得するにはどうすればよいですか?

  13. 13

    特定の範囲の可変リストを作成するためのより良い方法はありますか?

  14. 14

    特定の範囲の可変リストを作成するためのより良い方法はありますか?

  15. 15

    OracleCommandを構築するためのより良い方法はありますか?

  16. 16

    HaskellのASTに属性フィールドを追加するより良い方法はありますか?

  17. 17

    アダプターから親RecyclerViewへの参照を取得するより良い方法はありますか?

  18. 18

    CFMLでコレクション(構造体)をループするより良い方法はありますか?

  19. 19

    構造体への管理された参照が与えられた場合、オフセットでフィールドへの管理された参照を取得するにはどうすればよいですか?

  20. 20

    このPHPファイル関数を使用するためのより短い/よりクリーンな/より良い方法はありますか?

  21. 21

    結果をフィルタリングするためのより単純なSQLクエリまたはより良い方法はありますか?

  22. 22

    フィボナッチ数列を印刷するためのより良いコードはありますか?

  23. 23

    可変フィールドと不変フィールドの両方で構造体を初期化するにはどうすればよいですか?

  24. 24

    構造体を埋め込みますが、jsonには特定のフィールドしかありません

  25. 25

    グローバル変数を定義するためのより良い方法はありますか?

  26. 26

    構造体をフィールドの少ない別の構造体に変換する方法

  27. 27

    タッチアンドエコーを使用する以外に、bashでファイルを作成するためのより良い方法はありますか?

  28. 28

    AWS Athenaの構造体フィールドをフラット化する方法はありますか?

  29. 29

    SQLAlchemyKeyedTupleから特定のフィールドを取得するためのより良い方法

ホットタグ

アーカイブ