関数ハンドルをその の 1 つとして持つクラスがありますproperties
。
classdef MyClass
properties
hfun %function handle
end
methods
function obj = Myclass(hfun,...)
%PROBLEM: validate that the input argument hfun is the right kind of function
if ~isa(hfun,'function_handle') || nargin(hfun)~=1 || nargout(hfun)~=1
error('hfun must be a function handle with 1 input and 1 output');
end
obj.hfun = hfun;
end
end
end
hfun
入力引数が 1 つの入力と 1 つの出力を持つ関数ハンドルであることを確認したいのですが、それ以外の場合はエラーになります。さらに具体的に言えば、この関数が Nx3 配列を入力引数として取り、出力引数として Nx3 配列を返すようにしたいと思います。
上記のコードは のような組み込み関数に対して機能しますが、f = @sqrt
のような無名関数を入れようとすると、無名関数を として扱うため -1 になります。さらに、 のようなクラス メソッドにハンドルを入力すると、との両方に対して -1 を返す形式に関数が変換されます。f = @(x) x^(0.5)
nargout(hfun)
[varargout] = f(x)
f = @obj.methodFun
[varargout] = f(varargin)
nargin
nargout
関数ハンドルを入力引数として検証する便利な方法を見つけた人はいますか? どのような種類の関数ハンドルから独立していますか?