簡體   English   中英

如何將來自不同類的對象存儲在一個數組中,並在 MATLAB 中調用相同的 function(定義不同)?

[英]How to store objects from different classes in one array and call the same function (which definitions are different) in MATLAB?

我有兩個子類:

它們的對象將通過將它們附加到它們的末端來創建路徑。 這些都有自己的“plotCurve”方法。 我想將這些對象存儲在一個數組中,例如:

path = [line1,line2,arc1,line3,arc2,arc3,line4,arc4,arc5...];

(我認為“路徑”應該是超類“路徑”的 object)當我編寫類似的代碼時;

for i=1:size(path)
    path(i).plotCurve;
    hold on
end

應該顯示結果。 我應該能夠看到整個路徑。 (因此,當“Line”的 object 出現“plotCurve”方法時,應該運行並且對於 Arc 對象也是如此)。

它看起來像matlab.mixin.Heterogeneous的子類允許這種行為:

classdef Path < matlab.mixin.Heterogeneous
%...
end

classdef Line < Path
%...
end

classdef Arc < Path
%...
end

path = [Line,Line,Arc,Line,Arc,Arc];

figure, hold on
for i=1:numel(path)
    path(i).plotCurve;
end

我在這里找到了這個: https://www.mathworks.com/matlabcentral/answers/4354-matlab-handle-class-violates-polymorphism-on-handle-equivalence

盡管我認為將path設為元胞數組更容易,但上述代碼中的行為沒有區別,除了使用不同的索引: path{i}.plotCurve

根據@Cris 的建議,我建議進行一些類似這樣的改進(未經測試)

classdef Path < matlab.mixin.Heterogeneous
    methods (Abstract, Access = protected)
        plotOne(obj)
    end
    methods (Sealed)
        function plotAll(objs)
            figure; hold on;
            for obj = objs(:).' % loop over all elements
                plotOne(obj);
            end
        end
    end 
end

這使您可以在Path數組上調用plotAll方法 - 該方法必須是Sealed 它展開數組以在每個元素上調用單獨的plotOne方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM