2017-02-21 23 views
2

C++では、両方のオブジェクトのメモリアドレスを比較するだけです。私はMATLABで何か似たようなことをしますか?MATLAB - 2つのオブジェクトが同じかどうかを比較する方法

最悪の場合は、各コンストラクタで反復する静的変数を持つことになり、すべてのオブジェクトは現在の値をIDとして取得します。しかし、よりよい解決策はありますか?

ありがとうございます。

@Edit: 私はいくつか/ EQの過負荷をハンドルを継承したクラスとを変更できません与えていると仮定して、この質問を拡張したいと思います。私がにする場合は、このクラスの2つのオブジェクトを比較するどういうわけか両方のインスタンスをキャストしてを処理し、スーパークラスのeqの実装を使用しますか?

+0

ちょうど明らかである:あなたは具体的には、MATLABクラスについて質問していますよね? –

+0

はい、私は説明しました/何か間違ったことを言ったのですか? – baxbear

+0

いいえ、ありませんが、MATLABの行列/構造/セルはクラスとして動作し、 'A = ones(3); B = A、B、Aは同じであり、同じではない。それを混乱させない場所を明確にし、特に[MATLABs oop](https://uk.mathworks.com/help/matlab/object-oriented-programming.html)について話しています。 –

答えて

3

2つのハンドルオブジェクトabが同じインスタンスを参照することをテストするには、a == bを使用する必要があります。これはeq(a, b)と同じです。これはdefined behaviour of == for handle objectsです。つまり、ハンドルオブジェクトの場合、==はインスタンスの等しいかどうかをテストし、インスタンス内の値の等価性はテストしません。これは値オブジェクトとは異なります。

これを機能させるには、値オブジェクトのインスタンスをテストする意味がないため、ハンドルオブジェクト(classdef myObject < handle)を使用する必要があります。

N.B.ハンドルオブジェクトのインスタンス識別子を取得する必要がある場合は、永続変数を使用して説明するような処理を行う必要があります。 Here's an example。その場合は、すべてのオブジェクトの基本クラスを作成するので、同じコードを各クラスにコピーする必要はありません。しかし、2つのインスタンスをテストするだけであれば、それは不要です。

関連する問題