(使用最新Windows10下的Matlab 2018b。)我有一个文件夹Folder
,其中包含DoStuff.m
,其代码为:
%addpath('./SubFolder/SubSubFolder'); // SubSubFolder contains mex file defining myFunction used below
%close all;
function [res] = DoStuff(param) % Function has same name as the script defining it
res = myFunction(param)
end
其中myFunction
在mexw64
中包含的'./SubFolder/SubSubFolder'
文件中定义。
自然地,在Matlab的GUI(在文件夹Folder
中)中执行函数DoStuff(param)会引发以下错误:
'myFunction' is not found in the current folder or on the MATLAB path, but exists in ...
在'./SubFolder/SubSubFolder'
中...。高超。因此,我在%
的第一行中删除了DoStuff.m
并重新执行了Matlab GUI(在文件夹Folder
中)中的函数DoStuff(param)并得到以下错误:>
Function with duplicate name "DoStuff" cannot be defined.
奇怪,因为DoStuff
仅在一个位置定义:DoStuff.m
脚本内部。 (由which -all DoStuff
中的Matlab中的Folder
确认。)
注释。在Matlab2018b中,可以在名为toto
的脚本中定义名为toto.m
的函数,Matlab不会有任何问题它。因此,我的问题与相同的命名无关。它与添加addpath
行有关,但我不知道如何做。这种感觉的确认:用res = myFunction(param)
替换行res = 1
并取消注释addpath也会导致命名错误。
答案 0 :(得分:3)
如果函数在脚本文件中,则m文件的名称必须与函数的名称不同。也就是说,如果DoStuff.m
不是功能文件,则您的m文件名不能为DoStuff
。 DoStuff.m
都应该是这样的函数文件:
function [res] = DoStuff(param) % Note that there is no executable line before this
res = myFunction(param)
end
,否则您应该重命名函数或m文件。
假设您重命名m文件,则可以这样使用它:
addpath('./SubFolder/SubSubFolder'); %SubSubFolder contains mex file defining myFunction
close all;
res = DoStuff(param); %Calling the function
function [res] = DoStuff(param)
res = myFunction(param)
end