2013-01-10 77 views
3

讓我們直接看看代碼。有兩個類。超類是MATLAB:調用parfor的超類方法

classdef Parent 
    methods 
    function this = Parent() 
    end 

    function say(this, message) 
     fprintf('%s\n', message); 
    end 
    end 
end 

的子類是

classdef Child < Parent 
    methods 
    function this = Child() 
     this = [email protected](); 
    end 

    function say(this, message) 
     for i = 1 
     % This one works... 
     [email protected](this, message); 
     end 

     parfor i = 1 
     % ... but this one does not. 
     [email protected](this, message); 
     end 
    end 
    end 
end 

的問題是:如何使迴路工作不引入任何附加的方法?就目前而言,它引發了一個錯誤:「基類方法只能從同名的子類方法中顯式調用」。謝謝。

問候, 伊萬

回答

1

我想你可能需要顯式轉換thisParent調用parfor循環之前,然後調用Parent方法say明確:

this2 = Parent(this); 
parfor i = 1:1 
    say(this2, message); 
end 

爲了做到這一點,您需要修改Parent的構造函數以接受輸入參數:

function this = Parent(varargin) 
    if nargin == 1 
     this = Parent(); 
    end 
end 

如果ParentChild有屬性,你真正的類可能會做,你會包括以下的if聲明,將分配Child的屬性到新建成的Parent對象的一些代碼。