#author("2018-12-17T17:37:45+09:00","default:Miyashita","Miyashita") #author("2018-12-17T17:38:28+09:00","default:Miyashita","Miyashita") *オブジェクト配列 [#o5f73460] **配列の作成 [#mf7502d4] ここでは自作のclassを用い,Nx1 の配列を作成する.~ ここでは自作のclassを用い,Nx1 の配列を作成する.NxM 配列も手法は同じ.~ 初期化されたインスタンスの配列を作成するのは単純で,引数なしでクラス名を入力すればOK,例えば #codeprettify(lang-matlab){{ A(N,1) = myclass; }} で Nx1 配列のmyclassが生成される.~ 生成と同時に各要素のプロパティに何かを入力したい場合は下記の通り.~ #codeprettify(lang-matlab){{ 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文を付け忘れないように.~ 引数がない時のコンストラクタとしての機能を維持しておく必要があるため. **メソッド呼び出し [#v7ce36ed] ***ブロードキャスト [#gf963901] 引数とするインスタンスが配列あっても配列でなくても実行できるようにするには,~ 最初に配列かどうかを判定して, #codeprettify(lang-matlab){{ 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文か)を忘れないように. ***参考 [#rea3b793] -[[オブジェクト配列の作成 - MathWorks>https://jp.mathworks.com/help/matlab/matlab_oop/creating-object-arrays.html]] -[[Call method for object arrays in Matlab - StackOverflow>https://stackoverflow.com/questions/44281133/call-method-for-object-arrays-in-matlab]]