8

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

示例:f1为函数句柄。如何检查是否f1是内置的 Matlab 函数mean?如何检查是否f1是匿名函数?

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

“注意 MATLAB® 提供的functions功能仅用于查询和调试目的。因为它的行为可能会在后续版本中发生变化,所以您不应依赖它来进行编程。”

4

1 回答 1

11

使用 func2str 怎么样?

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

h1 = @(x) x.^2;
h2 = @mean;
str1 = func2str(h1);  %str1 = "@(x) x.^2"
str2 = func2str(h2);  %str2 = "mean"

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

isequal(h1,@mean);  % returns 0
isequal(h2,@mean);  % returns 1
于 2013-08-12T09:51:54.023 回答