Я думаю, что код на самом деле работает нормально, просто не совсем так, как вы ожидаете.
Как вы определили, 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