获取原始addrule 函数的句柄在使用函数对其进行映射之前:
fuzzy_addrule = @addrule;
此语句中的定义是“冻结的”,意思是如果您稍后重新定义或隐藏addrule 即won't affect fuzzy_addrule。
您现在可以定义您的 addrule 函数,它将影响原始的 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]
以上要求在定义函数之前创建工具箱函数的句柄。如果你想在在你的函数被定义之后访问工具箱函数,你可以这样做:
- 暂时改到工具箱文件夹,让工具箱函数has precedenceover functions放在路径上。
- 定义函数句柄
fuzzy_addrule。由于工具箱函数现在可见,句柄引用该函数。
- 改回原来的文件夹。现在您的函数再次具有优先权(它隐藏了工具箱函数),但您拥有工具箱函数的句柄
fuzzy_addrule。
代码:
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
完成此操作后,可以按上述方式调用每个函数。