功能名称冲突。如何调用MATLAB工具箱函数而不是用户定义的函数

时间:2015-03-26 19:45:28

标签: matlab

我有一个问题,我可以通过更改我的函数名称来解决。但我想知道是否有一个选项来调用MATLAB定义的函数,该函数与我的用户定义函数的名称相同。默认情况下,MATLAB始终使用用户定义的函数,但我想在同一个脚本中使用它们。 有什么想法吗?

MATLABfuzzytoolbox :: addrule(); 用户自定义的:: addrule()

3 个答案:

答案 0 :(得分:5)

Matlab使用第一个具有指定名称的函数显示在路径中,并且没有机制专门调用其中一个共享相同名称的函数。

一个好的做法是将您的功能放入packages。通过这种方式,您可以使用与内置函数相同的名称命名它们,但调用稍有不同:例如,如果包addrule中有函数Pack ie 文件夹addrule.m中的文件+Pack,您可以使用Pack.addrule调用它,而内置addrule函数只需{{1}调用}}

最佳,

答案 1 :(得分:4)

获取原始addrule函数之前的句柄,用您的函数对其进行遮蔽:

fuzzy_addrule = @addrule;

本声明中的定义是"冻结",在某种意义上说,如果您以后重新定义或隐藏addrule fuzzy_addrule addrule。{/ p>

您现在可以定义addrule功能,该功能将隐藏原始fuzzy_rule,但不会addrule = @(x,y) x+y; %// very simple example

>> addrule(3,4)
ans =
     7 %// your function's result

所以,要使用你的功能你只需写:

fuzzy_addrule

要使用原始功能,请拨打>> fuzzy_addrule(readfis('tipper'),[]) %// example call for fuzzy/addrule function ans = name: 'tipper' type: 'mamdani' andMethod: 'min' orMethod: 'max' defuzzMethod: 'centroid' impMethod: 'min' aggMethod: 'max' input: [1x2 struct] output: [1x1 struct] rule: [1x3 struct]

fuzzy_addrule

以上要求在定义函数之前创建工具箱函数的句柄。如果要在之后访问工具箱功能,则可以按如下方式执行此操作:

  1. 暂时更改为工具箱文件夹,以便工具箱功能won't affect覆盖路径上的功能。
  2. 定义函数句柄fuzzy_addrule。由于工具箱功能现在可见,因此句柄引用该功能。
  3. 更改回原始文件夹。现在你的函数再次具有优先权(它隐藏了工具箱函数),但你有工具箱函数的句柄curdir = pwd; %// take note of current folder t = which('addrule', '-all'); %// t{1} is your function, t{2} is the toolbox function fuzdir = regexp(t{2},'.+\\','match'); %// get only folder part cd(fuzdir{1}); %// change to that folder fuzzy_addrule = @addrule; %// define function handle cd(curdir); %// restore folder
  4. 代码:

    {{1}}

    完成此操作后,可以按上述方式调用每个函数。

答案 2 :(得分:0)

这会有所帮助:

http://se.mathworks.com/help/matlab/ref/builtin.html

我不确定它是否仅适用于“类”定义,或者它是否也适用于一般脚本/函数。