gpt4 book ai didi

matlab - 检查我的函数是否覆盖了另一个函数

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

我试图在运行时查明我的函数是否覆盖了另一个函数。

考虑以下假设场景。我正在实现一个名为 freqz 的函数,如果安装了信号处理工具箱,它可能存在于 MATLAB 中。如果它确实已经作为工具箱的一部分存在,我想在我自己的内部调用它并返回它的结果。如果它不存在,我希望我自己的函数进行自己的处理。

这是一个示例伪代码

function foo(args)
if overrides_another_function(foo)
func = find_overriden_function(foo);
result = func(args);
else
result = my_own_processing(args);

return result;

在这种情况下,当有人调用 foo 时,他们将获得他们期望的版本,如果 foo 从别处不可用,他们将返回我自己的实现。 MATLAB 能做这样的事情吗?

我尝试过的:

  • foo 中调用 exist 总是返回 2 (函数存在),因为一旦我们第一次进入函数就认为函数已声明时间。
  • 从 m 文件中的函数外部运行 exist 是无效的 MATLAB 语法。
  • 我还没有找到一种方法来列出具有给定名称的所有函数。如果这有可能实现,那我就成功了一半(我至少会知道存在,但仍然需要弄清楚如何访问被覆盖的函数)。

最佳答案

通过调用which,您可以获得任何函数的完整路径。假设您没有在名为 toolbox 的文件夹中放置任何自定义函数,这似乎工作得很好:

x = which('abs', '-all'); %// Returns a cell array with all the full path 
%// functions called abs in order of precedence

现在,检查这些是否在您安装的任何工具箱中:

in_toolbox = any(cellfun(@(c) any(findstr('toolbox',c)), x));

如果函数 'abs' 已经存在于您的工具箱中,这将返回 true,如果不存在,则返回 0。从那里我认为应该可以避免使用您自己定制的。

您还可以在 findstr 中检查 'built-in',但我发现工具箱中的一些函数名称前面没有这个。

关于matlab - 检查我的函数是否覆盖了另一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26002662/

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