Как создать "пустую" анонимную функцию в MATLAB?
Я использую анонимные функции для диагностической печати при отладке в MATLAB. Например.
debug_disp = @(str) disp(str);
debug_disp('Something is up.')
...
debug_disp = @(str) disp([]);
% diagnostics are now hidden
Использование disp([])
в качестве "gobble" кажется немного грязным для меня; есть ли лучший вариант? Очевидный (?) Метод не работает:
debug_disp = @(str) ;
Это может, я думаю, быть полезным для других приложений функционального языка, а не только для диагностики.
Ответы
Ответ 1
Вы можете добавить в свою базу кода обычную функцию do-nothing.
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, который в вырожденном случае ничего не делает и ничего не возвращает.
Ответ 2
Я думаю, что disp([])
или disp('')
вполне приемлемо. Он ничего не возвращает и не имеет побочных эффектов.
Ответ 3
Если вы просто ищете команду "ничего не делать", чтобы заменить тело анонимной функции, я бы, вероятно, пошел с DRAWNOW:
debug_disp = @(str) drawnow;
Это просто очистит очередь событий и обновит графику вместо отображения любого текста.
Ответ 4
Здесь анонимная функция do-nothing. Он ничего не делает и возвращает пустой массив, который вы можете просто игнорировать. Вам нужно будет отключить disp, поставив после нее точку с запятой.
debug_disp = @(str) [];
Диспет ([]) должен работать отлично. Какой бы стиль вы ни выбрали.
Ответ 5
попробуйте debug_disp = @(str)(1);