MATLAB - Могу ли я заставить мой объект ручки вести себя как графический дескриптор?

С помощью графических дескрипторов вы можете сделать это:

>> 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.

Насколько я понимаю, графические ручки просто дубли. Могут ли настраиваемые объекты вести себя таким же образом?


person Brian    schedule 06.07.2013    source источник
comment
связанные вопросы: stackoverflow.com/q/6806344/97160, stackoverflow.com/q/2510427/97160   -  person Amro    schedule 06.07.2013
comment
Эти сообщения не отвечают на вопрос, который я задаю, который конкретно связан с возможностью найти (~ isnan (x))   -  person Brian    schedule 06.07.2013
comment
@BBrock: возможно, пример массива ячеек, который я опубликовал, может помочь, вы бы использовали ~cellfun(@isempty, a) вместо ISNAN для проверки непустых ячеек   -  person Amro    schedule 06.07.2013
comment
@Amro: Спасибо за предложение - я знаю, что могу использовать для этой цели массивы ячеек, но для меня было бы особенно удобно иметь функциональность, идентичную функциональности, предлагаемой графическими дескрипторами ... так что я как бы догадываюсь о этот момент, что это невозможно?   -  person Brian    schedule 07.07.2013
comment
@BBrock: Боюсь, что это невозможно, вы не можете заставить свой класс возвращать объекты в виде числовых дескрипторов. Вы должны знать, что дескрипторная графика (HG) не реализуется с использованием задокументированного Система классов MCOS, вместо использования старых и полностью недокументированных классов UDD: undocumentedmatlab.com / blog / Introduction-to-udd   -  person Amro    schedule 07.07.2013
comment
Спасибо, информация о классе UDD / MCOS отвечает на мой вопрос. Что ж, мне грустно, что я действительно не могу делать то, что хотел, но ваши альтернативы действительны. Я приму ваш ответ, но можете ли вы отредактировать его, чтобы включить информацию в этот комментарий? Спасибо,   -  person Brian    schedule 07.07.2013


Ответы (1)


Пример:

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.

person Amro    schedule 06.07.2013