#author("2019-02-08T12:50:58+09:00","default:Miyashita","Miyashita") #author("2019-10-11T02:17:36+09:00","default:Miyashita","Miyashita") *関数ハンドルの使い方 [#o908f003] **そもそも関数ハンドルとは [#bb6d4ada] functionのそのものの情報を格納するデータ型.後に間接的に呼び出すことが可能になる.~ 実際に自分が有効活用したことはあまりない. 実際に自分が有効活用したことはあまりない.~ cellfun では次のような感じでそこそこ使う. #codeprettify(lang-matlab){{ % (例) セル配列 cell_array の個々のセル要素の空白判定 id = cellfun(@isempty, cell_array) }} **使い方 [#jff82909] @で関数ハンドルを生成・取得して,割り当てた変数をその関数のエイリアス(別名)として使う. #codeprettify(lang-matlab){{ fh = @function_name; foo = fh(varargin_of_function); }} 例として,以下の2つはどちらも同じ結果を得る. #codeprettify(lang-matlab){{ % 関数ハンドル使用 if (hogehoge) fh = @min else fh = @max end foo = fh(var) }} #codeprettify(lang-matlab){{ % 関数ハンドル不使用 if (hogehoge) foo = min(var); else foo = max(var); end }} 上記のパターンだと恩恵は少ないが, #codeprettify(lang-matlab){{ hogege = my_function(hogehoge,@function_name) }} のように,functionの引数として関数ハンドルを使うと,functionの汎用性が高くなる. **参考 [#ff4bea27] @は下記のように無名関数の定義としても使える. -[[無名関数 - MathWorks>https://jp.mathworks.com/help/matlab/matlab_prog/anonymous-functions.html?s_tid=gn_loc_drop]]