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

Matlab-检查函数句柄是否为特定函数或函数类型,matlab,function-handle,Matlab,Function Handle,问题:在Matlab中,如何检查函数句柄是否为特定函数或函数类型 示例:让f1成为函数句柄。如何检查f1是否为内置的Matlab函数平均值?如何检查f1是否为匿名函数 我当前的解决方案:我当前对此问题的解决方案包括调用函数函数函数接受函数句柄作为输入,并返回一个包含有关输入函数句柄信息的结构,例如函数类型、路径、函数名称等。它可以工作,但不是一个理想的解决方案,因为: “小心MATLAB®提供的函数函数仅用于查询和调试目的。由于其行为在后续版本中可能会发生变化,因此您不应将其用于编程目的。”使用

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

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

我当前的解决方案:我当前对此问题的解决方案包括调用
函数
函数<代码>函数接受函数句柄作为输入,并返回一个包含有关输入函数句柄信息的结构,例如函数类型、路径、函数名称等。它可以工作,但不是一个理想的解决方案,因为:


“小心MATLAB®提供的
函数
函数仅用于查询和调试目的。由于其行为在后续版本中可能会发生变化,因此您不应将其用于编程目的。”

使用func2str如何

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

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


这是一个抽象的问题,但我想知道你为什么要这样做?你想问的问题背后更重要的是什么?@SamRoberts在一个接受
f1
作为输入的函数中,如果
f1
是一系列公认函数中的一个,例如样本均值等,我可以采取某些捷径,我还希望该函数适用于其他类型的函数
f1
,在这些函数中不可能有这样的捷径。这有意义吗?科林,你可能想通读这篇文章,特别是MathWorks的Loren Shure的两条评论(一条引用,一条在实际评论中):这表明一些内置功能,如
cellfun
面临着与你相同的问题,并通过允许函数句柄和一组有限的字符串参数位于同一位置来解决此问题,从而为预设字符串提供一个替代的、更快的代码路径。“这是一本非常有趣的书,谢谢你——它确实强化了你之前关于重复函数名的观点。”。很高兴看到我不是唯一一个试图解决这个问题的人:-)你需要小心处理这个问题-如果路径发生变化,它将不起作用。例如:在路径上创建用户定义的函数
mean
。用
f=@mean
为其创建一个句柄。删除用户定义的函数。使用
g=@mean
为内置
mean
创建一个句柄。现在
func2str(f)
func2str(g)
都返回
mean
。另外(对我来说这似乎是一个bug)
isequal(f,g)
返回
true
。但是它们是不同的东西,
f
现在会出错,因为文件无法访问。“如果你需要像这样担心路径改变或函数阴影,我认为你所要求的并不是完全可能的。”SamRoberts有趣的观点。这对我个人来说不是问题——我刻意避免运行时路径更改和重复的函数名——但是对于其他对这个主题感兴趣的人来说,你的评论绝对是一个有价值的资源。非常感谢。
h1 = @(x) x.^2;
h2 = @mean;
str1 = func2str(h1);  %str1 = "@(x) x.^2"
str2 = func2str(h2);  %str2 = "mean"
isequal(h1,@mean);  % returns 0
isequal(h2,@mean);  % returns 1