如何在MATLAB中解决名称冲突?

时间:2018-06-13 08:09:52

标签: matlab function name-conflict

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

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

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

有没有办法在不需要重命名的情况下使用内置函数?有哪些方法可以单独引用函数和脚本?

2 个答案:

答案 0 :(得分:3)

为了重复性而略微修改Nicky's answer:在导航到存储stack.m GUI的地图之前,运行

builtinStack = @stack();

创建一个函数句柄。通过这种方式,您可以调用builtinStack(),就像应该调用MATLAB函数一样,每次要使用它时都不需要cd

builtin建议使用hoki不起作用,因为内置函数定义为

  

...诸如“ind2sub”,“sub2ind”等函数不是MATLAB内置函数.... MATLAB附带但未定义为内置函数的函数可以参考作为“MATLAB函数”......

MathWorks Technical Support回答。这意味着像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>

答案 1 :(得分:3)

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

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

我在这里以magic

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

其中dummy是子文件夹的名称。