Есть ли способ создания фрагментов кода внутри файла .m
, который анализируется один раз во время компиляции в MATLAB?ifdef-like поведение в MATLAB
Например, предположим, что у вас есть фрагмент кода, который является модальным и будет выполняться несколько раз, но он всегда будет использовать один и тот же режим. Однако для переносимости и простоты чтения кода я предпочту иметь все разные режимы в одном файле. Что-то в строках
if mode==1
% code of mode 1
elseif mode==2
% code of mode 2
elseif mode==3
% code of mode 3
end
Однако, если этот файл выполняется тысячу раз, я должен выполнить это условное значение в тысячу раз. Но для каждого прогона я устанавливаю режим и не меняю его.
Поэтому я думал, что если у MATLAB есть что-то в строках #ifdef
, например C, в котором я могу выделить все остальные части, которые не будут использоваться при выполнении.
+1 вы должны создать функцию 'select_implementation', которая возвращает дескриптор функции в одну из возможных реализаций' @ func1, @ func2, ..' (каждый в отдельном M-файле). Это будет вызываться один раз, и дескриптор возвращенной функции будет передан вместе с фактическим вызовом, который выполняет итерации: 'fh = select_implementation (..); для i = 1: 1e5, out (i) = my_alg (fh, i, ...); end' – Amro
Если вы хотите сделать это со всем кодом в том же файле, который был исходным запросом OP, я подозреваю, что накладные расходы функции (основной функции модуля), вызывающей другую функцию (заданную дескриптором) победит цель вопроса; не могли бы вы прокомментировать? Я согласен с тем, что обмен файлами в качестве решения является изящным, но я не уверен в повышении эффективности по сравнению с последовательным 'if' или' switch'. – Floris
@Floris: извините за поздний ответ (не получил уведомление без «на имя пользователя»). Когда MATLAB разрешает подфункции функциональных вызовов (все в одном файле) имеют более высокий приоритет, чем внешние функции, так что может выполнить бит-бит быстрее. Встроенный код будет еще быстрее. Хотя я не думаю, что эффективность будет иметь большое значение здесь, так же как и удобочитаемость и хорошая организация кода, любое увеличение производительности здесь было бы крошечным, если таковое было. Разве вы так не думаете? – Amro