【发布时间】:2013-10-01 13:51:11
【问题描述】:
我有一个类,它有一个函数句柄作为其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 这样的内置函数,但是如果我尝试放入像f = @(x) x^(0.5) 这样的匿名函数,那么nargout(hfun) 是-1,因为它将匿名函数视为[varargout] = f(x)。此外,如果您将句柄输入到像f = @obj.methodFun 这样的类方法,那么它会将函数转换为[varargout] = f(varargin) 的形式,对于nargin 和nargout 都返回-1。
有没有人想出一种方便的方法来验证函数句柄作为输入参数?与它来自哪种函数句柄无关?
【问题讨论】:
-
您可以使用
functions函数来提取有关函数句柄的更多信息。 mathworks.se/help/matlab/ref/functions.html -
这样做有什么实际用途?
-
我想将它用于几个用途。我正在编写一个 A* 类,它计算节点边图上的最短路径,但我想让用户能够自定义启发式函数,而不仅仅是使用到目标的默认欧几里得距离。另一个用途是在我的 RRT 类中,它实现了快速探索随机树算法来构建节点边图。我想让用户能够自定义节点扩展的运动约束。用户将能够将此运动约束作为函数句柄输入。
标签: matlab oop validation matlab-class function-handle