Как создать "пустую" анонимную функцию в 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);