オブジェクト配列

配列の作成

ここでは自作のclassを用い,Nx1 の配列を作成する.NxM 配列も手法は同じ.
初期化されたインスタンスの配列を作成するのは単純で,引数なしでクラス名を入力すればOK,例えば

A(N,1) = myclass;

で Nx1 配列のmyclassが生成される.
生成と同時に各要素のプロパティに何かを入力したい場合は下記の通り.

classdef MCUtils
% Class MCUtils
% Written by -----
% last modified xx.xx.xx
    properties
        dirpath
        nregion
        regioninfo
        depth
    end
    methods
        % Contsructor
        function obj = MCUtils(argstr)
           if nargin ~= 0
               % % 1次元配列の場合の例
               narray = size(argstr,1);
               obj(narray,1) = MCUtils; % narray x 1の空のMCUtils作成
               for i = 1:narray
                   obj(i).dirpath = argstr(i,:);
               end
           end
       end
    end
end

このとき,if nargin ~= 0 〜 end のif文を付け忘れないように.
引数がない時のコンストラクタとしての機能を維持しておく必要があるため.

メソッド呼び出し

ブロードキャスト

引数とするインスタンスが配列あっても配列でなくても実行できるようにするには,
最初に配列かどうかを判定して,

methods
    % hogehoge
    % ....
   
    %%%%%%%%%%%%%%%%%%%%%
    function obj = GetDepth(obj)
    % % depth取得

       % % 引数が配列の場合は1つずつ実行
       if numel(obj) > 1
           for i = 1:numel(obj)
               obj(i) = obj(i).GetDepth; % 同じfunction名にして再帰的に実行
           end
           return % 忘れないように
       end


       % % 引数が配列でない場合
       file = dir(fullfile(obj.dirpath,'*.dep'));
       obj.depth = hogehoge_func(file);

    end
    %%%%%%%%%%%%%%%%%%%%%
end

配列である場合,最後にある return を忘れると配列でない場合の箇所も実行してしまいエラーになる.
return(もしくはelse文か)を忘れないように.

参考


Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2018-12-17 (Mon) 08:38:28 (91d)