Matlab - 检查函数句柄是否是特定函数或函数类型

Col*_*ers 8 matlab function-handle

问题:在Matlab中,如何检查函数句柄是特定函数还是函数类型?

例如:我们f1是一个函数句柄.如何检查是否f1是内置的Matlab函数mean?如何检查是否f1是匿名函数?

我目前的解决方案:我目前解决此问题的方法是调用该functions函数.functions接受一个函数句柄作为输入,并返回一个包含输入函数句柄信息的结构,例如函数类型,路径,函数名等.它可以工作,但它不是一个理想的解决方案,因为,引用官方文档:

"注意事项MATLAB®仅提供functions用于查询和调试的功能.由于其行为可能会在后续版本中发生变化,因此您不应将其用于编程目的."

nkj*_*kjt 11

使用func2str怎么样?

如果这是一个内置函数,它应该只返回一个包含函数名的字符串; 如果它是一个匿名函数,它应该返回匿名函数(包括@).

h1 = @(x) x.^2;
h2 = @mean;
str1 = func2str(h1);  %str1 = "@(x) x.^2"
str2 = func2str(h2);  %str2 = "mean"
Run Code Online (Sandbox Code Playgroud)

您还可以使用isequal来比较两个函数句柄(ETA:这不能比较两个匿名函数,除非一个是作为另一个的副本创建的):

isequal(h1,@mean);  % returns 0
isequal(h2,@mean);  % returns 1
Run Code Online (Sandbox Code Playgroud)

  • 你需要小心这一点 - 如果路径发生变化,它将无法工作.例如:在路径上创建用户定义的函数`mean`.用`f = @ mean`来处理它.删除用户定义的功能.使用`g = @ mean`来处理内置的'mean`.现在``func2str(f)`和`func2str(g)`都返回'mean`.另外(这对我来说似乎是个错误)`isequal(f,g)`返回`true`.但它们是不同的东西,而`f`现在会因文件无法访问而出错.如果你需要担心这样的路径变化或功能阴影,我不认为你所要求的是完全可能的. (5认同)