0

グラフィックス ハンドルを使用すると、次のことができます。

>> a = nan(1,5)

a =
   NaN   NaN   NaN   NaN   NaN

>> a(3) = line([1 2],[1 2])

a =
       NaN       NaN    0.0042       NaN       NaN

>> find(~isnan(a),1,'first')

ans =
     3

通常のハンドル派生クラスでこれを行うと、次のエラーが発生します。

>> a(3) = MyObject(1,1,1)
The following error occurred converting from MyObject to double:
Error using double
Conversion to double from MyObject is not possible.

私が理解している限り、グラフィックス ハンドルは単なる double です。カスタム オブジェクトもこのように動作できますか?

4

1 に答える 1

0

例:

MyObject.m

classdef MyObject < handle
    properties
        x
    end
    methods
        function obj = MyObject(x)
            if nargin < 1, x = NaN; end
            obj.x = x;
        end
    end
end

MATLAB

>> a = MyObject.empty(0,3)
a = 
  0x3 MyObject array with properties:

    x

>> a(3) = MyObject(10)
a = 
  1x3 MyObject array with properties:

    x

>> a(3)
ans = 
  MyObject with properties:

    x: 10
>> a(1)
ans = 
  MyObject with properties:

    x: NaN

オブジェクトa(1:2)は、引数なしでデフォルトのコンストラクターを呼び出すことによって構築されたことに注意してください。

別の方法:

>> a = cell(1,3)
a = 
    []    []    []
>> a{3} = MyObject(10)
a = 
    []    []    [1x1 MyObject]

注: ハンドル グラフィックス (HG) は、文書化されているMCOSクラス システムを使用して実装されているのではなく、古い完全に文書化されていないUDDクラスを使用して実装されています。

于 2013-07-06T17:52:57.510 に答える