이 작업을 수행하는 한 가지 방법은 기능 대신 class을 작성하는 것입니다. 다음은 원하는만큼 확장 할 수있는 매우 기본적인 클래스를 정의합니다. 필자의 예에서는 함수의 두 단계를 runFirstStep
및 runSecondStep
이라는 두 가지 함수로 분해해야합니다.
당신은
obj = myAwesomeClass;
finalResults = obj.run(inputData); %# pass inputData for the first step if necessary
중간 결과는 obj.intermediateResults
에 저장됩니다로 실행 것, 그래서 다시 run
를 호출하는 경우, 첫 번째 단계는 자동으로 생략됩니다.
원할 경우 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
을 절약 할 수있다, 당신은 결과의 좋은 플롯을 생산하는 것 plot
방법을 추가 할 수 있습니다. 즉, 클래스를 사용하면 데이터와 상호 작용하는 데 필요한 모든 기능을 편리하게 수집 할 수 있습니다.
+1 : 나는 일반적으로 두 부분으로 전체 코드를 깨는 (별도의 기능에 즉 초기 처리 및 보조 처리) 제안하지만, 할 의도는 (하나의 함수에 모든 것을 유지 [지속 변수]하는 경우 HTTP : //www.mathworks.com/help/techdoc/ref/persistent.html)은 확실히 가장 직접적인 해결책입니다. – gnovice