почему свойства не принимают новое значение из метода класса? - PullRequest
8 голосов
/ 11 ноября 2011

Я пытаюсь понять немного больше о классах 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" в присваивании?

Ответы [ 2 ]

12 голосов
/ 11 ноября 2011

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

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

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

classdef Test < handle
3 голосов
/ 11 ноября 2011

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

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

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

a = a.change_var(2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...