Вопрос:

почему свойства не принимают новое значение из метода класса?

class matlab properties

4074 просмотра

2 ответа

2425 Репутация автора

Я пытаюсь понять немного больше о классах Matlab и их свойствах. Вот тестовый класс, который я создал:

classdef Test    
    properties
         % Properties of the network type
        some_var
    end

    methods
         function N = Test()
         end

        function change_var( N, val )
             N.some_var=val;
        end
    end
end

Теперь я создаю экземпляр этого класса и вызываю "change_var ()" ...

>> a=Test;
>> a.change_var(2);
>> a.some_var

ans =

     []

Почему свойство "some_var" не принимает значение "val" в присваивании?

Автор: gnychis Источник Размещён: 10.11.2011 09:45

Ответы (2)


12 плюса

6574 Репутация автора

Решение

TestКласс был определен как значение класса в отличие от класса ручки . Эффективно, когда вы звоните a.change_var, aпередается по значению. Чтобы сохранить изменения в some_varсвойстве, сделайте это:

>> a = Тест;
>> a = a.change_var (2);

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

classdef Test 
     
                            Автор: b3.
                            Размещён: 10.11.2011 09:54
                        

3 плюса

37884 Репутация автора

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

function N = change_var( N, val )
     N.some_var=val;
end

Обратите внимание, что функция возвращает измененный объект. Далее вам необходимо обновить aс изменениями как:

a = a.change_var(2);
Автор: abcd Размещён: 10.11.2011 09:56
Вопросы из категории :
32x32