Один из способов сделать это - написать класс вместо функции. Следующее определяет очень простой класс, который вы можете расширять столько, сколько хотите. Это требует, чтобы вы разбили два шага в вашей функции на две функции, называемые runFirstStep
и runSecondStep
в моем примере.
Вы бы запустили его как
obj = myAwesomeClass;
finalResults = obj.run(inputData); %# pass inputData for the first step if necessary
Промежуточный результат сохраняется в obj.intermediateResults
, поэтому при повторном вызове run
первый шаг автоматически пропускается.
Если вы хотите, вы можете добавить функцию set и get для свойства intermediateResults
. Функция set будет записывать результаты на диск всякий раз, когда вы пишете в функцию, а функция get пытается загружать промежуточные результаты (если они присутствуют) всякий раз, когда она вызывается, и свойство все еще пусто.
classdef myAwesomeClass<handle
properties
intermediateResults
end
methods
function finalResults = run(obj,inputData)
%# run accepts the object and runs both steps, if necessary
%# inputData is the data that is processed (if it's not loaded inside runFirstStep)
%# the first step only needs to run if there are no intermediate results
if isempty(obj.intermediateResults)
obj.intermediateResults = runFirstStep(inputData);
end
%# we always want to run the second step
finalResults = runSecondStep(obj.intermediateResults);
end
end
end
Очевидно, что вы также можете сохранить finalResults
в свойстве, добавить методы set / get с сохранением и для него, и вы можете добавить метод plot
, который выдает хорошие графики ваших результатов. Короче говоря, класс позволяет вам удобно собирать все функции, необходимые для взаимодействия с вашими данными.