2012-06-05 2 views

답변

0

모든 출력이 자신의 코드로 인쇄되는 경우 모든 fprintfdisp 호출을 사용자 고유의 함수 호출로 쉽게 바꿀 수 있으며 모든 출력에 선택적으로 함수 이름 앞에 접두사를 붙일 수 있습니다.

getfunctionname.m :

function [CurrentFunctionName, PreviousFunctionName] = getfunctionname() 
CurrentFunctionName = ''; 
PreviousFunctionName = ''; 
MyStack = dbstack('-completenames'); 
if (length(MyStack) < 2) 
    error('Function getfunctionname.m cannot be called from MATLAB console.'); 
elseif (length(MyStack) == 2) 
    CurrentFunctionName = MyStack(2).name; 
else 
    CurrentFunctionName = MyStack(2).name; 
    PreviousFunctionName = MyStack(3).name; 
end 
return 

myprintf.m :

function myprintf(varargin) 
global PrefixOutputWithFunctionName 
if (PrefixOutputWithFunctionName) 
    [~, PreviousFunctionName] = getfunctionname; 
    fprintf('### %s.m:\n', PreviousFunctionName); 
end 
disp(sprintf(varargin{:})); 
return 

mydisp.m :

function mydisp(varargin) 
global PrefixOutputWithFunctionName 
if (PrefixOutputWithFunctionName) 
    [~, PreviousFunctionName] = getfunctionname; 
    fprintf('### %s.m:\n', PreviousFunctionName); 
end 
disp(varargin{:}); 
return 

mainfunction.m :

여기

코드입니다
function mainfunction() 
global PrefixOutputWithFunctionName 

% set PrefixOutputWithFunctionName to false to disable prefixing. 
PrefixOutputWithFunctionName = true; 

% the code goes here... 

% example output. 
myprintf('some text...\n some more text...'); 
return 
+0

나는 그것을 얻을 수 없었다 ... –

+0

답장을 보내 주셔서 감사합니다! 나는 그것을 얻을 수 없었다. 나는 시도했다. 그러나 나는 다음과 같은 오류를 얻는다. ??? 최대 재귀 한계는 500에 도달했습니다. 제한을 변경하려면 set (0, 'RecursionLimit', N) 을 사용하십시오. 사용 가능한 스택 공간을 초과하면 충돌 MATLAB 및/또는 컴퓨터를 사용할 수 있습니다. ==> getfunctionname의 오류 –

+0

글쎄,'getfunctionname'은'getstopname' 함수를 호출 한 함수의 이름을 얻기 위해'dbstack'을 사용하고 그것을 반환합니다. 실제로'mfilename'을 사용할 수도 있지만, 이전 함수의 이름을 얻으려면 어쨌든'dbstack'을 사용해야합니다. 'myprintf'는 전역 변수'PrefixOutputWithFunctionName'의 값을 검사합니다. 사실이라면'fprintf' 출력에 호출 한 함수의 이름 앞에 접두사를 붙입니다. 'mainfunction.m'은 전역 변수'PrefixOutputWithFunctionName'을 정의하고'myprintf'를 어떻게 사용하는지 간단한 예제 일뿐입니다. 'mydisp'도'disp'와 비슷합니다. – nrz