論理式でのハンドル
ハンドル オブジェクトは論理値 true
または false
として評価されません。対象の状態をテストして論理値を返す関数を使用しなければなりません。
ハンドルが有効かどうかの判定
変数に有効なグラフィックス オブジェクトのハンドルが格納されているかどうかを判定するには、isgraphics
を使用します。たとえば、hobj
がワークスペースの変数とします。この変数を操作する前に、その有効性をテストします。
if isgraphics(hobj) ... end
オブジェクトのタイプも判定できます。
if isgraphics(hobj,'figure') ...% hobj is a figure handle end
結果が空かどうかの判定
論理ステートメント内で空のオブジェクトを直接使用することはできません。isempty
を使用して、論理ステートメント内で使用できる論理値を返させます。
一部のプロパティには、他のオブジェクトへのハンドルが格納されます。そのオブジェクトが存在しない場合、プロパティには空のオブジェクトが含まれます。
close all
hRoot = groot;
hRoot.CurrentFigure
ans = 0x0 empty GraphicsPlaceholder array.
たとえば、ルートの CurrentFigure
プロパティをクエリして現在の Figure があるかどうかを判定するには、関数 isempty
を使用します。
hRoot = groot; if ~isempty(hRoot.CurrentFigure) ... % There is a current figure end
コードが空のオブジェクトに遭遇する可能性があるもう 1 つのケースは、ハンドルを検索する場合です。たとえば、Figure の Tag
プロパティに文字ベクトル 'myFigure'
を設定し、findobj
を使用してこの Figure のハンドルを取得する場合を考えます。
if isempty(findobj('Tag','myFigure')) ... % That figure was NOT found end
一致が見つからない場合、findobj
は空のオブジェクトを返します。
ハンドルが等価かどうかの判定
ハンドル同士が等しくなる状態は 2 つあります。
任意の 2 つのハンドルが同じオブジェクトを参照する場合 (
==
を使用してテスト)任意の 2 つのハンドルによって参照されるオブジェクトが同じクラスに属し、すべてのプロパティに同じ値が設定されている場合 (
isequal
を使用してテスト)
h
が Tag
プロパティに myFigure
の値をもつ Figure のハンドルであるかどうかを判定するとします。
if h == findobj('Tag','myFigure') ...% h is correct figure end
別のオブジェクトが同じ状態にあるかどうかを判定するには、isequal
を使用します。
hLine1 = line; hLine2 = line; isequal(hLine1,hLine2)
ans = 1