gpt4 book ai didi

matlab - 如何将函数句柄验证为输入参数?

转载 作者:太空宇宙 更新时间:2023-11-03 20:30:18 26 4
gpt4 key购买 nike

我有一个类,它有一个函数句柄作为其属性之一。

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) 的形式,它返回-1 用于 narginnargout

有没有人想出一个方便的方法来验证函数句柄作为输入参数?独立于它来自哪种函数句柄?

最佳答案

我最接近验证函数句柄的输入和输出的是在 try/catch 语句中。

function bool = validateFunctionHandle(fn)
%pass an example input into the function
in = blahBlah; %exampleInput
try
out = fn(in);
catch err
err
bool = false;
return;
end

%check the output argument
if size(out)==correctSize and class(out)==correctType
bool=true;
else
bool=false;
end
end

关于matlab - 如何将函数句柄验证为输入参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19013934/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com