2つの参照変数が同じオブジェクトを借用しているかどうかを確認するにはどうすればよいですか?

Apliex-Ddr

たとえば、すべてが読み取り専用参照を格納する構造体があります。

struct Pt { x : f32, y : f32, }
struct Tr<'a> { a : &'a Pt }

私がしたいimpl EqためにTr、下にあるかどうかをテストするためにa正確に同じへの参照Pt

let trBase1 = Pt::new(0.0, 0.0);
let trBase2 = Pt::new(0.0, 0.0);
assert!(trBase1 == trBase2);        // ok.
let tr1 = Tr::new(&trBase1);
let tr2 = Tr::new(&trBase2);
let tr3 = Tr::new(&trBase1);
assert!(tr1 == tr3);                // ok.
assert!(tr1.a == te2.a);            // ok. Using Eq for Pt that compare values.
assert!(tr1 != tr2);                // panicked! Not intended.

だから今私は持っています

impl<'a> PartialEq for Tr<'a> {
    fn eq(&self, v : &Tr<'a>) -> bool {
        // self.a == v.a // doesn't work.
    }
}

私は何を書くべきですか?

スカペラ

を使用std::ptr::eqして、2つのポインタのアドレスを比較できます。参照(&Tまたは&mut T)は*const T、この関数に供給されると、基になるポインター()に自動的に強制されます。もちろん、可変参照は常に排他的参照であるため、可変参照が別の参照と同じアドレスを持つことは意味がありませんが、それでも強制的に*const T

// This derive will use the equality of the underlying fields
#[derive(PartialEq)]
struct Pt {
    x: f32,
    y: f32,
}

impl Pt {
    fn new(x: f32, y: f32) -> Self {
        Self { x, y }
    }
}

struct Tr<'a> {
    a: &'a Pt,
}

impl<'a> Tr<'a> {
    fn new(a: &'a Pt) -> Self {
        Self { a }
    }
}

// Here we use std::ptr::eq to compare the *addresses* of `self.a` and `other.a`
impl<'a> PartialEq for Tr<'a> {
    fn eq(&self, other: &Tr<'a>) -> bool {
        std::ptr::eq(self.a, other.a)
    }
}

fn main() {
    let tr_base1 = Pt::new(0.0, 0.0);
    let tr_base2 = Pt::new(0.0, 0.0);
    assert!(tr_base1 == tr_base2);

    let tr1 = Tr::new(&tr_base1);
    let tr2 = Tr::new(&tr_base2);
    let tr3 = Tr::new(&tr_base1);

    assert!(tr1 == tr3);
    assert!(tr1.a == tr2.a);
    assert!(tr1 != tr2);
}

(遊び場リンク)

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

2つの変数がPythonで同じオブジェクトを参照しているかどうかを確認するにはどうすればよいですか?

分類Dev

2つの変数がメモリ内の同じオブジェクトを指しているかどうかを確認するにはどうすればよいですか?

分類Dev

2つの変数が同じ参照を持っているかどうかを確認するにはどうすればよいですか?

分類Dev

2つのctypesオブジェクトを比較して等しいかどうかを確認するにはどうすればよいですか?

分類Dev

postmanテストを使用して、API応答の1つのノードがすべてのオブジェクトで同じ値を持っているかどうかを確認するにはどうすればよいですか?

分類Dev

オブジェクトの配列が同じ値であるかどうかを確認するにはどうすればよいですか

分類Dev

2つのMapオブジェクトが等しいかどうかを確認するにはどうすればよいですか?

分類Dev

オブジェクト(変数)がRで定義されているかどうかを確認するにはどうすればよいですか?

分類Dev

配列内のオブジェクトIDが同じかどうかを確認するにはどうすればよいですか?

分類Dev

Kotlinで2つのオブジェクトが同じクラスを持っているかどうかを確認するにはどうすればよいですか?

分類Dev

変更されていないキーの参照をjavascriptで同じに保ちながら、変更なしで同じ値を持つオブジェクトのキーの値を変更するにはどうすればよいですか?

分類Dev

2つのハッシュマップに同じIDのオブジェクトが含まれているかどうかを確認するにはどうすればよいですか?

分類Dev

順序に関係なく、2つのオブジェクトに同じ単語が含まれているかどうかを確認するにはどうすればよいですか?

分類Dev

2つのJavaScriptオブジェクトが同じキーを持っているかどうかを確認するにはどうすればよいですか

分類Dev

1つの配列に同じオブジェクトへの複数の可変参照を含めるにはどうすればよいですか?

分類Dev

オブジェクトに同じ文字列があるかどうかを確認するにはどうすればよいですか?

分類Dev

2つのカレンダーオブジェクトで表される日付(年-月-日)が同じであるかどうかを正しく確認するにはどうすればよいですか?

分類Dev

変数を使用してオブジェクトを参照するにはどうすればよいですか

分類Dev

オブジェクトの配列が同じキーに対して同じ値を持っているかどうかを確認するにはどうすればよいですか?

分類Dev

リストに連続して同じ値の2つの要素があるかどうかを確認するにはどうすればよいですか?

分類Dev

reactとjavascriptを使用してオブジェクトの配列がnullかどうかを確認するにはどうすればよいですか?

分類Dev

2つの行列が同じかどうかを確認するにはどうすればよいですか?

分類Dev

2つのWin32APIハンドルが同じオブジェクトを表していることを確認するにはどうすればよいですか?

分類Dev

オブジェクトが同じクラスの新しいオブジェクトと等しいかどうかを確認するにはどうすればよいですか?

分類Dev

2つの変数がPythonで同じオブジェクトを参照しているかどうかを比較する

分類Dev

TreeMapに特定のオブジェクトが含まれているかどうかを確認するにはどうすればよいですか?

分類Dev

変数がオブジェクトなのか、小枝のある配列なのかを確認するにはどうすればよいですか?

分類Dev

Delphiで、1つの変数だけを使用して作成されたオブジェクトを参照するにはどうすればよいですか?

分類Dev

JavaScript:同じオブジェクト内の別の変数と同じ変数を割り当てるにはどうすればよいですか?

Related 関連記事

  1. 1

    2つの変数がPythonで同じオブジェクトを参照しているかどうかを確認するにはどうすればよいですか?

  2. 2

    2つの変数がメモリ内の同じオブジェクトを指しているかどうかを確認するにはどうすればよいですか?

  3. 3

    2つの変数が同じ参照を持っているかどうかを確認するにはどうすればよいですか?

  4. 4

    2つのctypesオブジェクトを比較して等しいかどうかを確認するにはどうすればよいですか?

  5. 5

    postmanテストを使用して、API応答の1つのノードがすべてのオブジェクトで同じ値を持っているかどうかを確認するにはどうすればよいですか?

  6. 6

    オブジェクトの配列が同じ値であるかどうかを確認するにはどうすればよいですか

  7. 7

    2つのMapオブジェクトが等しいかどうかを確認するにはどうすればよいですか?

  8. 8

    オブジェクト(変数)がRで定義されているかどうかを確認するにはどうすればよいですか?

  9. 9

    配列内のオブジェクトIDが同じかどうかを確認するにはどうすればよいですか?

  10. 10

    Kotlinで2つのオブジェクトが同じクラスを持っているかどうかを確認するにはどうすればよいですか?

  11. 11

    変更されていないキーの参照をjavascriptで同じに保ちながら、変更なしで同じ値を持つオブジェクトのキーの値を変更するにはどうすればよいですか?

  12. 12

    2つのハッシュマップに同じIDのオブジェクトが含まれているかどうかを確認するにはどうすればよいですか?

  13. 13

    順序に関係なく、2つのオブジェクトに同じ単語が含まれているかどうかを確認するにはどうすればよいですか?

  14. 14

    2つのJavaScriptオブジェクトが同じキーを持っているかどうかを確認するにはどうすればよいですか

  15. 15

    1つの配列に同じオブジェクトへの複数の可変参照を含めるにはどうすればよいですか?

  16. 16

    オブジェクトに同じ文字列があるかどうかを確認するにはどうすればよいですか?

  17. 17

    2つのカレンダーオブジェクトで表される日付(年-月-日)が同じであるかどうかを正しく確認するにはどうすればよいですか?

  18. 18

    変数を使用してオブジェクトを参照するにはどうすればよいですか

  19. 19

    オブジェクトの配列が同じキーに対して同じ値を持っているかどうかを確認するにはどうすればよいですか?

  20. 20

    リストに連続して同じ値の2つの要素があるかどうかを確認するにはどうすればよいですか?

  21. 21

    reactとjavascriptを使用してオブジェクトの配列がnullかどうかを確認するにはどうすればよいですか?

  22. 22

    2つの行列が同じかどうかを確認するにはどうすればよいですか?

  23. 23

    2つのWin32APIハンドルが同じオブジェクトを表していることを確認するにはどうすればよいですか?

  24. 24

    オブジェクトが同じクラスの新しいオブジェクトと等しいかどうかを確認するにはどうすればよいですか?

  25. 25

    2つの変数がPythonで同じオブジェクトを参照しているかどうかを比較する

  26. 26

    TreeMapに特定のオブジェクトが含まれているかどうかを確認するにはどうすればよいですか?

  27. 27

    変数がオブジェクトなのか、小枝のある配列なのかを確認するにはどうすればよいですか?

  28. 28

    Delphiで、1つの変数だけを使用して作成されたオブジェクトを参照するにはどうすればよいですか?

  29. 29

    JavaScript:同じオブジェクト内の別の変数と同じ変数を割り当てるにはどうすればよいですか?

ホットタグ

アーカイブ