Я только что столкнулся с этой проблемой на 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
(в противном случае переопределение просто назовет его self). Так что 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