2

ishandledouble 入力に対して 1 を返すのはなぜですか? 例えば:

>> a = zeros(1, 2);
>> a(1) = line([1 2], [1 2]);

a =
    175.0010         0   

>> ishandle(a)

ans =
    1     1

非ハンドル オブジェクトに対して 0 を返すハンドルが有効かどうかを確認する方法はありますか?

4

2 に答える 2

2

ishandle 0 (= デスクトップ ハンドル) や 1 (= デフォルトで最初に開いた図) などの一般的な数値を受け入れます。これらは多くの場合、有効なハンドルでもあります。ただし、存在しないプロパティに設定しようとすると、エラーが発生します

質問に答えるには、コードを例外処理ブロック内に配置します。

try
   set(a,propName,propValue);
catch
   % do something useful... 
end

または、探しているオブジェクトのタイプがわかっている場合は、次のように置き換えますishandle(a)(たとえば):

ishandle(a) && strcmp(get(a,'type'),'line')
于 2013-07-04T04:25:30.810 に答える
1

実際、Matlab ハンドルは単なる倍精度数です。グラフィックス オブジェクト (Figure、Axes、Line など) を使用すると、Matlab は各項目に非常に特殊な double をハンドルとして割り当てます。

このishandle関数は、渡された数値が、ハンドルで表すことができるオブジェクトへのハンドルとして機能しているかどうかを確認します。

数値 (常に整数値の double が割り当てられる) を使用してデモンストレーションするには:

>> close all;   %Close any open figures
>> ishandle(1)  %Now the value 1 is not a handle
ans =
     0
>> figure(1)    %Open a figure, assign it the value 1
>> ishandle(1)  %Now 1 i a handle
ans =
     1

上記の例では、値0は常にハンドルであり、Matlab ルート ハンドル オブジェクトを表します。これは、コマンド ウィンドウに関連するいくつかの設定が保持される場所であり、すべての図の親として機能します。値 175.xxxx は、プロット コマンドを使用して描画した線に割り当てられたハンドルです。

1 つの便利なトリックはfindobj関数です。入力パラメーターと一致するパラメーターを持つ、特定のオブジェクトの子であるすべてのオブジェクトを検索します。例えば:

h = findobj(0,'type','figure');  Returns all figures
h = findobj(0,'type','line');    Returns all line objects in all figures
h = findobj(1,'type','line');    Returns all line objects in figure 1
h = findobj(1,'type','line','color','r');    Returns all line objects in figure 1 whose color is 'r'.
于 2013-07-04T05:22:52.520 に答える