Matlab 如何更改map.continer子类中的值

Matlab 如何更改map.continer子类中的值,matlab,oop,Matlab,Oop,我有一个超类 classdef SysSignal<handle %SIGNALP Summary of this class goes here % Detailed explanation goes here properties (SetAccess = public, GetAccess = public ) SetOfSignal = containers.Map('KeyType','char', 'ValueType', 'any') end me

我有一个超类

classdef SysSignal<handle
%SIGNALP Summary of this class goes here
%   Detailed explanation goes here

properties (SetAccess = public, GetAccess = public )



    SetOfSignal = containers.Map('KeyType','char', 'ValueType', 'any')

end



methods
         %constructor
    function sys=SysSignal()

    end

    function sys=adds(sys,varargin)

        %convert form cell to signalup
       for n=1:length(varargin)

        signal=varargin{1,n};

        if isempty(signal.name)
        continue
        else
             %add to the map 
            sys.SetOfSignal(signal.name)= signal;

        end




       end

    end
但我有一个错误:

???使用==>subsasgn时出错 containers.Map只支持一级索引


如何更改超类中的值

答案是将
sys.SetOfSignal('dd').sumrole='hello'
分成两条语句:

dd = sys.SetOfSignal('dd'); 
dd.sumrole='hello'
这是因为sys.SetOfSignal('dd').sumrole并不像你直觉上想象的那样。实际上,
containers.Map
类重载了下标引用和下标赋值运算符。本质上,它们同时“截取”
()
{}
操作符(即
.sumrole
被“发送”到map.Containers对象,而不是您的对象!)。在我看来,这是一个非常奇怪的设计决定,但我们必须接受它

有关更多信息,请查看以下链接:

gregswiss的答案是正确的,只是访问容器映射会创建一个副本,因此您可以通过用新的修改值替换旧值来完成

dd = sys.SetOfSignal('dd'); 
dd.sumrole='hello'
sys.SetOfSignal('dd') = dd;

这行吗
dd=sys.SetOfSignal('dd');dd.sumrole='hello'
?谢谢,但这怎么可能呢?创建新变量影响现有变量这通常是正确的。但是OP的容器包含一个类的对象,该类派生自
handle
,因此所有副本都引用相同的数据;更改一个副本也会更改所有其他副本。
dd = sys.SetOfSignal('dd'); 
dd.sumrole='hello'
dd = sys.SetOfSignal('dd'); 
dd.sumrole='hello'
sys.SetOfSignal('dd') = dd;