在this question的答案中, MathWorks支持团队指出:
也有可能超载! (bang)运营商通过创建一个 文件名为“!.m”,并将此文件放在目录之前 MATLAB搜索路径中的$ MATLABROOT \ toolbox \ matlab \ general。
我试过这个,但似乎没有用。我在Linux Mint上运行Matlab 9.1.0.441655(R2016b)。我的路径看起来像这样:
/home/raphael/Programs/Test
/usr/local/MATLAB/R2016b/toolbox/matlab/iofun
...
/usr/local/MATLAB/R2016b/toolbox/matlab/general
...
我在!.m
中创建了一个文件/home/raphael/Programs/Test
。无论我在此文件中放置什么,编辑器都会显示错误:
Line 1: Unable to run code analysis. '/home/raphael/Programs/Test/!.m' is an invalid file name.
作为! (bang)运算符未列在Operators and associated function list中,不清楚要放在!.m
文件中的内容。
尽管如此,我还是尝试了一些代码:
function bang(c)
disp(c)
但是虽然which !
返回我的自定义文件路径,但Matlab总是调用内置运算符:
>> which !
/home/raphael/Programs/Test/!.m
>> !pwd
/home/raphael/Programs/Test
将文件重命名为bang.m
可解决错误,但对bang操作符没有影响。
所以:
答案 0 :(得分:5)
看起来这个!.m
的未记录处理在R2015b中消失了(可能是随着该版本引入的新执行引擎更改)。
对于早于R2015b的版本,您确实可以在路径上命名文件!.m
,然后在文件中的函数名称并不重要(因为它从不在MATLAB中做。)
<强> !.m
强>
function bang(varargin)
disp('bang!')
end
在当前版本的MATLAB中,!
运算符将忽略您的!.m
文件,但会调用基础system
,unix
或dos
命令。因此,您需要重载这些命令。
所以在OS X上,仅仅unix.m
重载就可以了:
<强> unix.m
强>
function varargout = unix(varargin)
disp('My Unix Command')
[varargout{1:nargout}] = builtin('unix', varargin{:});
end