我在 MATLAB 中创建了一个名为“堆栈”的 GUI。它有一个.m
与之关联的文件。此 GUI 由同一文件夹中的另一个 GUI 多次调用。
现在我发现“ stack ”是 MATLAB 中的一个内置函数,我需要将它用于同一工作目录中的其他内容。所有对堆栈函数的调用都以某种方式通过调用stack.m
脚本来调用 GUI。
我不想重命名它,因为它在很多地方都使用过。
有没有办法使用内置函数而不需要重命名?有什么方法可以分别引用函数和脚本?
我在 MATLAB 中创建了一个名为“堆栈”的 GUI。它有一个.m
与之关联的文件。此 GUI 由同一文件夹中的另一个 GUI 多次调用。
现在我发现“ stack ”是 MATLAB 中的一个内置函数,我需要将它用于同一工作目录中的其他内容。所有对堆栈函数的调用都以某种方式通过调用stack.m
脚本来调用 GUI。
我不想重命名它,因为它在很多地方都使用过。
有没有办法使用内置函数而不需要重命名?有什么方法可以分别引用函数和脚本?
为了可重复性,对Nicky 的答案稍作修改:在导航到stack.m
存储 GUI 的地图之前,运行
builtinStack = @stack();
它创建了一个函数句柄。这样您就可以builtinStack()
像调用 MATLAB 函数一样调用它,而不必cd
每次要使用它时都退出目录。
正如hokibuiltin
所建议的那样,使用不起作用,因为内置函数被定义为
...诸如“ind2sub”、“sub2ind”等函数不是 MATLAB 内置函数......那些随 MATLAB 提供但未定义为内置函数的函数可以称为“MATLAB职能” ...
正如MathWorks 技术支持所回答的那样。这意味着类似stack
的函数不是内置的,因为它们是用不同的语言构建、编译然后从 MATLAB 调用的,但实际上是用 MATLAB 编写的并随发行版一起提供。检查这一点的主要方法是输入edit <functionname>
;当仅显示注释时,该函数是由 TMW 定义的内置函数,当它也显示 MATLAB 代码时stack
,它不是上述定义的内置函数。
内置函数的一个示例是sum
,其关联的 .m 文件如下所示:
%SUM Sum of elements.
% S = SUM(X) is the sum of the elements of the vector X. If X is a matrix,
% S is a row vector with the sum over each column. For N-D arrays,
% SUM(X) operates along the first non-singleton dimension.
%
% S = SUM(X,DIM) sums along the dimension DIM.
%
% S = SUM(...,TYPE) specifies the type in which the
% sum is performed, and the type of S. Available options are:
%
% 'double' - S has class double for any input X
% 'native' - S has the same class as X
% 'default' - If X is floating point, that is double or single,
% S has the same class as X. If X is not floating point,
% S has class double.
%
% S = SUM(...,NANFLAG) specifies how NaN (Not-A-Number) values are
% treated. The default is 'includenan':
%
% 'includenan' - the sum of a vector containing NaN values is also NaN.
% 'omitnan' - the sum of a vector containing NaN values
% is the sum of all its non-NaN elements. If all
% elements are NaN, the result is 0.
%
% Examples:
% X = [0 1 2; 3 4 5]
% sum(X, 1)
% sum(X, 2)
%
% X = int8(1:20)
% sum(X) % returns double(210), accumulates in double
% sum(X,'native') % returns int8(127), because it accumulates in
% % int8 but overflows and saturates.
%
% See also PROD, CUMSUM, DIFF, ACCUMARRAY, ISFLOAT.
% Copyright 1984-2015 The MathWorks, Inc.
% Built-in function.
也就是说,从最后一行也可以看出,这是根据定义内置的。请注意,第一个“评论”中包含的所有内容都是在help sum
键入时看到的;从某种意义上说,空行会破坏帮助文件。因此,在命令行上简单地键入时,版权和内置信息不会显示出来help sum
,因此要检查一个函数是否是内置的,你需要edit <functionname>
.
免责声明:请,请,请不要这样做。
假设您自己stack.m
的仅在搜索路径中,因为它在当前文件夹中,那么最简单的解决方法是创建一些虚拟子文件夹,导航到它,执行 Matlabsstack
函数(这是stack
当前搜索路径中唯一的)并导航回来。
在这里,我举例说明magic
:
function a= magic
n=5;
cd dummy
a= magic(n);
cd ..
dummy
子文件夹的名称在哪里。