Matlab使用多个容器.Map引发索引超出矩阵维度错误

时间:2013-07-24 08:36:00

标签: matlab map

这是一个示例代码:

A类:

classdef classA
    properties
        mapOfB
    end
    methods
        function self = classA(names)
            self.mapOfB = containers.Map();
            for i = 1:numel(names)
                self.mapOfB(names{i}) = classB(names);
            end
        end
    end
end

B组:

classdef classB
    properties
        mapTest
    end
    methods
        function self = classB(names)

            self.mapTest = containers.Map();
            for i = 1:numel(names)
                self.mapTest(names{i}) = rand(1,3);
            end
        end              
    end   
end

主脚本:

names = {'one', 'two', 'three', 'four'};
a = classA(names);
a.mapOfB
a.mapOfB.keys
a.mapOfB('one')
a.mapOfB('one').mapTest
a.mapOfB('one').mapTest.keys
a.mapOfB('one').mapTest('one')

控制台输出:

a.mapOfB('one').mapTest.keys

ans = 

    'four'    'one'    'three'    'two'

a.mapOfB('one').mapTest('one')
Error using subsref
Index exceeds matrix dimensions.

我不明白为什么当我在地图中调用地图项时,索引超出矩阵尺寸错误。这是一个Matlab限制?

1 个答案:

答案 0 :(得分:1)

这一行完全等同于“a.mapOfB('one')。mapTest('one')”,不会引发错误

builtin('_paren', a.mapOfB('one').mapTest, 'one')

因此,它不是“真正的”错误,而是对MATLAB语法或容器实现的限制.Map的subsref()运算符。

另见this popular question