Matlab中containers.Map与dictionary调用对象成员的差异问题
问题原因分析
核心差异源于containers.Map与dictionary的索引操作返回值形式不同:
containers.Map的索引(map(key))底层通过subsref方法返回逗号分隔的多输出列表,这个设计是为了支持一次索引多个键返回多个值。即使只索引单个键,它依然会返回单元素的多输出列表,而非单个对象。dictionary作为较新的容器,索引操作返回的是单个对象/数组,不存在多输出列表的处理逻辑。
具体报错逻辑
当你直接执行链式调用app.MC(-15).Enregistre_Reference_Dephasage_Secteur(a, b)时:
- Matlab解析
app.MC(-15)得到一个多输出列表(即使只有一个Monte_Carlo对象)。 - 解析器尝试对这个多输出列表调用成员方法,但方法调用仅支持作用于单个对象,因此触发“Too many output arguments”错误。
而通过中间变量存储时:
mc_obj = app.MC(-15);会自动将多输出列表的第一个元素赋值给变量(因为只有一个元素),此时mc_obj是单个Monte_Carlo对象,调用成员方法自然正常。
验证方法
可以通过以下代码验证返回值形式的差异:
% 针对containers.Map [obj1, obj2] = app.MC(-15); % 不会报错,即使单个键也支持多输出接收 % 针对dictionary [obj1, obj2] = app.MC(-15); % 会报错,因为仅返回单个输出
内容的提问来源于stack exchange,提问作者LnlB
相关产品推荐
相关产品推荐

