Как сделать «пустую» анонимную функцию в MATLAB? - PullRequest
15 голосов
/ 15 декабря 2009

Я использую анонимные функции для диагностической печати при отладке в MATLAB. Например.,

debug_disp = @(str) disp(str);
debug_disp('Something is up.')
...
debug_disp = @(str) disp([]);
% diagnostics are now hidden

Использование disp([]) в качестве "глотка" мне кажется немного грязным; есть ли лучший вариант? Очевидный (?) Метод не работает:

debug_disp = @(str) ;

Я думаю, что это может быть полезно для других приложений на функциональных языках, а не только для диагностики.

Ответы [ 5 ]

15 голосов
/ 14 июня 2011

Вы можете добавить обычную функцию "ничего не делать" в вашу кодовую базу.

function NOP(varargin)
%NOP Do nothing
%
% NOP( ... )
%
% A do-nothing function for use as a placeholder when working with callbacks
% or function handles.

% Intentionally does nothing

Затем вы можете использовать дескриптор функции вместо анонимной функции, где бы вы не хотели что-либо выводить.

debug_disp = @NOP;

Теперь это несколько самодокументируется, давая понять, что вы намерены ничего не делать, вместо того, чтобы получить неправильный ввод для disp (). Это будет очевидно из исходного кода, плюс, когда вы находитесь в отладчике и изучаете переменные, содержащие дескрипторы функций, он будет отображаться как «@NOP», что может быть более читабельным, чем анонимный дескриптор. И вы можете получить список всех отключенных операций в выводе «отчета о профиле», посмотрев список вызывающих абонентов в NOP.

Вы также можете использовать встроенный в Matlab @deal, который в вырожденном случае ничего не делает и ничего не возвращает.

10 голосов
/ 15 декабря 2009

Я думаю disp([]) или disp('') вполне приемлемо. Он ничего не возвращает и не имеет побочных эффектов.

3 голосов
/ 15 декабря 2009

Вот анонимная функция бездействия. Он ничего не делает и возвращает пустой массив, который вы можете просто проигнорировать. Вам нужно подавить disp, поставив точку с запятой после него.

debug_disp = @(str) [];

Дисп ([]) тоже должен работать нормально. Какой стиль вы предпочитаете.

3 голосов
/ 15 декабря 2009

Если вы просто ищете команду «ничего не делать», чтобы заменить тело анонимной функции, я бы, вероятно, выбрал DRAWNOW :

debug_disp = @(str) drawnow;

Это просто очистит очередь событий и обновит графику вместо отображения текста.

2 голосов
/ 15 декабря 2009

попробуй debug_disp = @(str)(1);

...