我刚刚在 MATLAB R2014b 上遇到了这个问题,我也想覆盖figure
. 我认为这是最接近您更新问题的解决方案(3.5 年后......)。
我认为使用评论中的“肮脏”技巧实际上是最干净的,如果做得巧妙,因为它不需要您更改并且可以仅针对您想要覆盖内置matlabrc.m
功能的功能抑制警告。
- 将所有默认覆盖放在不在您的永久 MATLAB 路径上的文件夹中。我把我的
~/Documents/MATLAB/overrides
放在我的 Mac 上。我有例如~/Documents/MATLAB/overrides/figure.m
- 用于
startup.m
在警告关闭的情况下向路径添加覆盖,然后重新打开:
warning off MATLAB:dispatcher:nameConflict
addpath('/Users/victor/Documents/MATLAB/overrides');
warning on MATLAB:dispatcher:nameConflict
不确定波浪号扩展是否适用,addpath
所以我写出了完整的路径。
这样做会选择性地抑制对我的警告,仅针对从中加载的内容overrides
。当然,您可以对文件夹命名更具选择性。这也意味着我不必更改我的 MATLAB 系统文件中的任何内容,因此它已本地化到我的用户帐户并在升级中持续存在(无论好坏;负责任的猴子补丁)。
要从我的覆盖访问内置figure
,我必须cd
暂时到那里(否则覆盖将简单地调用它自己)。所以figure.m
看起来像这样:
function fig = figure(varargin)
% Call original figure function
old = pwd;
cd(fullfile(matlabroot, 'toolbox', 'matlab', 'graphics', ''));
fig = figure(varargin{:});
cd(old);
% ...
% Do dirty override magic
end