Можно ли использовать свойства дескриптора объекта, возвращаемого функцией, без предварительного назначения временной переменной? - PullRequest
4 голосов
/ 18 октября 2011

У меня есть функция, которая возвращает дескриптор экземпляра объекта. Что-то вроде:

function handle = GetHandle()
    handle = SomeHandleClass();
end

Я бы хотел использовать возвращаемое значение, как если бы я писал программу на C:

foo = GetHandle().property;

Тем не менее, я получаю сообщение об ошибке MATLAB, когда он пытается разобрать, что:

??? Undefined variable "GetHandle" or class "GetHandle".

Единственный способ заставить это работать без ошибок, это использовать временную переменную в качестве промежуточного шага:

handle = GetHandle();
foo = handle.property;

Существует ли простое и элегантное решение для этого или это просто невозможно с помощью синтаксиса MATLAB?

Ответы [ 3 ]

2 голосов
/ 19 октября 2011

Чтобы определить статические свойства, вы можете использовать ключевое слово CONSTANT (спасибо, @Nzbuu)

Вот один пример из MathWorks (с некоторыми исправленными ошибками):

classdef NamedConst
   properties (Constant)
      R = pi/180;
      D = 1/NamedConst.R;
      AccCode = '0145968740001110202NPQ';
      RN = rand(5);
   end
end

Постоянные свойства доступны как className.propertyName, например, NamedConst.R.Значения свойств устанавливаются всякий раз, когда класс загружается в первый раз (после запуска Matlab или после clear classes).Таким образом, NamedConst.RN будет оставаться постоянным на протяжении всего сеанса, пока вы не вызовете clear classes.

1 голос
/ 19 октября 2011

Единственный способ иметь статическое свойство в MATLAB - это константа:

classdef someHandleClass < handle
    properties (Constant)
        myProperty = 3
    end
end

, тогда someHandleClass.myProperty вернет 3.

1 голос
/ 19 октября 2011

Хм, я не люблю не соглашаться с Джонасом и его 21.7k очками, но я думаю, что вы можете сделать это, используя класс дескриптора hgsetget вместо обычного класса дескриптора, а затем используя get function.

function handle = GetHandle()
    handle = employee();
end


classdef employee < hgsetget
    properties
        Name = ''
    end
    methods
        function e = employee()
            e.Name = 'Ghaul';
        end
    end
end

Затем вы можете использовать функцию get для получения свойства:

foo = get(GetHandle,'Name')

foo =

Ghaul

EDIT: Это не совсем так, как C, но довольно близко.

...