Не умеет работать со свойствами в классе Matlab - PullRequest
1 голос
/ 29 ноября 2011

Следующий код MATLAB не работает. Я полагаю, что в программе смены функций это что-то делает, MATLAB пытается выровнять объекты A и B, а не просто устанавливает значения в одно и то же. Любой обходной путь для этого?

classdef foo
    %FOO Summary of this class goes here
    %   Detailed explanation goes here

    properties
        A=5
        B=0
    end

    methods
        function changer(obj)
            obj.B=obj.A
        end
    end

end

1 Ответ

5 голосов
/ 29 ноября 2011

Я думаю, что код на самом деле работает нормально, просто не совсем так, как вы ожидаете.

Как вы определили, foo - это класс value , поэтому он имеет семантику значений, а не ссылочную (или дескрипторную) семантику. Когда вы выполняете changer(myobj), MATLAB создает копию myobj с новым значением B и возвращает ее вам. Оригинал myobj остается без изменений. При реализации класса значений вы обычно добавляете выходной аргумент в changer, чтобы иметь возможность продолжить работу с этой новой копией.

function obj = changer(obj)

Если вы установите foo в класс handle , наследуя от handle:

classdef foo<handle

тогда он будет иметь ссылочную (или дескрипторную) семантику, где изменяется исходный myobj (тогда вам больше не нужен выходной аргумент из changer):

>> myobj = foo;
>> changer(myobj); % or alternatively myobj.changer
>> myobj.B
ans =
     5
...