2016-08-25 6 views
1

Я определил класс в одном из моих многочисленных пакетов MATLAB. К моему удивлению, я не смог получить доступ к постоянному свойству моего класса, не импортируя определение класса. Даже если это метод самого класса. Как так:Класс импорта для доступа к постоянным значениям

classdef TestClass 

    properties(Constant) 

     c=0; 
    end 

    methods 

     function obj = TestClass()   
     end 

     function getC(obj) 

      import test.TestClass; 
      disp(TestClass.c); 
     end 
    end  
end 

Я просто хочу, чтобы проверить ли я делаю что-то здесь не так, или это правильный способ использования констант в MATLAB.

+0

Зачем вам нужен 'getC', чтобы получить доступ к постоянному значению? Без 'function getC ...' я могу набрать 'TestClass.c' и он возвращает' 0'. Если вы хотите напрямую вызвать 'getC' в классе, это должен быть статический метод. –

ответ

1

Поскольку вы разместили TestClass внутри пакета, Matlab должен знать, где искать определение для этого класса, даже если это ссылка из класса или функции. Заместитель приведенный выше код может быть:

function getC(obj) 
     disp(test.TestClass.c); 
    end 

В качестве альтернативы, если в пределах класса, постоянные значения могут быть доступны из самого объекта.

function getC(obj) 
     disp(obj.c); 
    end 

Если ни один из них не работает на вас, возможно, вам придется обновить classdef для TestClass из памяти. Это заставит Matlab перезагрузить постоянное значение, которое втягивается в Matlab, когда он сначала анализирует файл classdef, чтобы определить структуру класса. Это можно сделать с помощью clear classes, однако предупреждение о том, что оно также очистит все остальные классы, переменные и любые точки останова, которые вы установили.

Если вы хотите, чтобы это было необходимо, вы можете просмотреть объект метакласса, чтобы определить, что Matlab «думает» о вашей структуре класса. Вы можете сделать это, используя следующее.

mc = ?test.TestClass; 
mc.PropertyList 

Вам может понадобиться индекс в список свойств, чтобы найти конкретное свойство, в котором вы заинтересованы, но то, что вы ищете следующие поля.

  • Название: 'с'
  • Constant: 1
  • DefaultValue: 0

 Смежные вопросы

  • Нет связанных вопросов^_^