从同一目录调用具有相同名称的 MATLAB m 文件和 mex 文件
Calling MATLAB m-file and mex-file with same name from same directory
小问题:
我在 相同的 目录中有两个文件。第一个文件是 MATLAB .m 文件,另一个是 MATLAB mex 文件:
MyFunction.m
MyFunction.mexw64
由于两个文件都将通过 MyFunction(1,2,3,'Test')
调用,我目前无法调用其中任何一个。有没有办法指定我要调用的文件的扩展名?也许是这样的(这不起作用):
MyFunction.m(1,2,3,'Test')
如果没有简单的解决方案,我将被迫将文件移动到不同的目录...
提前致谢!
不,没有。这是因为 MATLAB 的 function precedence order,它声明路径上的任何 MEX 文件将始终优先于同名的 M 文件。
解决这个问题的通常方法是对两个文件使用不同的 名称,以及一个包含如下内容的包装器:
function varargout = MyFunction(varargin)
if exist('MyFunction_MEX', 'file') == 3
[varargout{1:nargout}] = MyFunction_MEX(varargin{:});
elseif any(exist('MyFunction_M', 'file') == [2 5 6])
[varargout{1:nargout}] = MyFunction_M(varargin{:});
else
error([mfilename ':function_not_found'],...
'An M file or MEX file with matching signature could not be found.');
end
小问题:
我在 相同的 目录中有两个文件。第一个文件是 MATLAB .m 文件,另一个是 MATLAB mex 文件:
MyFunction.m
MyFunction.mexw64
由于两个文件都将通过 MyFunction(1,2,3,'Test')
调用,我目前无法调用其中任何一个。有没有办法指定我要调用的文件的扩展名?也许是这样的(这不起作用):
MyFunction.m(1,2,3,'Test')
如果没有简单的解决方案,我将被迫将文件移动到不同的目录...
提前致谢!
不,没有。这是因为 MATLAB 的 function precedence order,它声明路径上的任何 MEX 文件将始终优先于同名的 M 文件。
解决这个问题的通常方法是对两个文件使用不同的 名称,以及一个包含如下内容的包装器:
function varargout = MyFunction(varargin)
if exist('MyFunction_MEX', 'file') == 3
[varargout{1:nargout}] = MyFunction_MEX(varargin{:});
elseif any(exist('MyFunction_M', 'file') == [2 5 6])
[varargout{1:nargout}] = MyFunction_M(varargin{:});
else
error([mfilename ':function_not_found'],...
'An M file or MEX file with matching signature could not be found.');
end