如何解决 MATLAB 中的名称冲突?
How do I resolve name conflict in MATLAB?
我在 MATLAB 中创建了一个名为 "stack" 的 GUI。它有一个与之关联的 .m
文件。此 GUI 被同一文件夹中的另一个 GUI 多次调用。
现在我发现“stack”是 MATLAB 中的一个内置函数,我需要将其用于同一工作目录中的其他内容。所有对堆栈函数的调用都通过调用 stack.m
脚本以某种方式调用 GUI。
我不想重命名这个,因为它被用在很多地方。
有没有不用重命名就可以使用内置函数的方法?有什么方法可以分别引用函数和脚本?
为了可重复性对 稍作修改:在导航到存储 stack.m
GUI 的地图之前,运行
builtinStack = @stack();
创建函数句柄。这样您就可以调用 builtinStack()
就像应该调用 MATLAB 函数一样,而不必每次要使用它时都 cd
离开目录。
使用builtin
, as suggested by 是行不通的,因为内置函数被定义为
...Functions such as "ind2sub", "sub2ind", etc. are not MATLAB built-in functions.... Those functions that are shipped with MATLAB but are not defined as built-in functions can be referred to as "MATLAB functions" ...
如 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
时,会看到第一个 'comment' 中包含的所有内容;从某种意义上说,空行会破坏帮助文件。因此,仅在命令行中键入 help sum
时不会显示版权和内置信息,因此要检查函数是否为内置,您需要 edit <functionname>
.
免责声明:请不要这样做。
假设您自己的 stack.m
只在搜索路径中,因为它在当前文件夹中,那么最简单的解决方法是创建一些虚拟子文件夹,导航到它,执行 Matlabs stack
函数(这是当前搜索路径中唯一的 stack
)并向后导航。
这里我用magic
来举例说明:
function a= magic
n=5;
cd dummy
a= magic(n);
cd ..
其中 dummy
是子文件夹的名称。
我在 MATLAB 中创建了一个名为 "stack" 的 GUI。它有一个与之关联的 .m
文件。此 GUI 被同一文件夹中的另一个 GUI 多次调用。
现在我发现“stack”是 MATLAB 中的一个内置函数,我需要将其用于同一工作目录中的其他内容。所有对堆栈函数的调用都通过调用 stack.m
脚本以某种方式调用 GUI。
我不想重命名这个,因为它被用在很多地方。
有没有不用重命名就可以使用内置函数的方法?有什么方法可以分别引用函数和脚本?
为了可重复性对 stack.m
GUI 的地图之前,运行
builtinStack = @stack();
创建函数句柄。这样您就可以调用 builtinStack()
就像应该调用 MATLAB 函数一样,而不必每次要使用它时都 cd
离开目录。
使用builtin
, as suggested by
...Functions such as "ind2sub", "sub2ind", etc. are not MATLAB built-in functions.... Those functions that are shipped with MATLAB but are not defined as built-in functions can be referred to as "MATLAB functions" ...
如 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
时,会看到第一个 'comment' 中包含的所有内容;从某种意义上说,空行会破坏帮助文件。因此,仅在命令行中键入 help sum
时不会显示版权和内置信息,因此要检查函数是否为内置,您需要 edit <functionname>
.
免责声明:请不要这样做。
假设您自己的 stack.m
只在搜索路径中,因为它在当前文件夹中,那么最简单的解决方法是创建一些虚拟子文件夹,导航到它,执行 Matlabs stack
函数(这是当前搜索路径中唯一的 stack
)并向后导航。
这里我用magic
来举例说明:
function a= magic
n=5;
cd dummy
a= magic(n);
cd ..
其中 dummy
是子文件夹的名称。