#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]]

Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes