2013-07-24 165 views
2

這裏,示例代碼:Matlab的使用多個containers.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

不知道確切的答案,但我想這是某種兩個相關怎樣[的subsref](http://www.mathworks.com.au/help/matlab/ref/subsref .html)和[索引](http://www.mathworks.com.au/help/matlab/matlab_oop/indexed-reference-and-assignment.html)如何在matlab中工作。 – Marcin

回答

1

這條線,這是完全等同於「a.mapOfB(‘一’)。mapTest(‘一’)」,不會引發錯誤

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

因此它不是一個「真正的」錯誤,但是對MATLAB的語法或container的實現有限制.Map的subsref()運算符。

又見this popular question