2

我在 MATLAB 中创建了一个名为“堆栈”的 GUI。它有一个.m与之关联的文件。此 GUI 由同一文件夹中的另一个 GUI 多次调用。

现在我发现“ stack ”是 MATLAB 中的一个内置函数,我需要将它用于同一工作目录中的其他内容。所有对堆栈函数的调用都以某种方式通过调用stack.m脚本来调用 GUI。

我不想重命名它,因为它在很多地方都使用过。

有没有办法使用内置函数而不需要重命名?有什么方法可以分别引用函数和脚本?

4

2 回答 2

3

为了可重复性,对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>.

于 2018-06-13T08:30:43.357 回答
3

免责声明:请,请,请不要这样做。

假设您自己stack.m的仅在搜索路径中,因为它在当前文件夹中,那么最简单的解决方法是创建一些虚拟子文件夹,导航到它,执行 Matlabsstack函数(这是stack当前搜索路径中唯一的)并导航回来。

在这里,我举例说明magic

function a= magic
n=5;
cd dummy
a= magic(n);
cd ..

dummy子文件夹的名称在哪里。

于 2018-06-13T09:07:32.190 回答