2011-07-27 7 views
5

function ExtremePoints = AnalyseData(ScanData) 함수를 만들고 싶습니다.Matlab - 작업 공간 변수 사용

인수 ScanData를 전달하지 않고도이 기능을 실행할 수 있기를 원합니다.이 경우 Matlab Workspace에서 같은 이름의 변수를 사용하고 싶습니다.

작업 본문에 나타나는 변수 ScanData의 함수 본문 내에서 사용할 수 있습니까?

또는 먼저 작업 공간에서 ScanData 변수의 내용을 .mat 파일로 저장 한 다음 해당 파일을 함수 본문에로드해야합니까?

+3

@Edric은 이미 언급했듯이, 많은 고통없이 다른 곳에서 기능을 제대로 재사용 할 수 없으므로 (강력하게) 권장하지 않습니다 (변수가 누락되어'ScanData'에 완전히 다른 내용이 저장되어 있습니다. code, mlint는'eval' 또는'evalin', ... 안에 실수에 대해 경고하지 않습니다. 자신에게 호의를 베풀고 필요가 없을 때 이것들을 사용하지 마십시오! – Egon

+0

문제는 앞서 언급 한 함수가 테스트 스크립트로 더 많이 사용되고 명령 창에서 호출을 시작하는 대신 편집기에서 직접 함수를 호출하기 때문에이 질문을하는 이유입니다. 그래도 조언 주셔서 감사합니다! :) – Simon

+1

할 수있는 일이 있습니다. 우선 함수 대신 스크립트를 만들 수 있습니다 (단지'function ... '을 생략하십시오). 모든 변수는 기본 작업 영역의 일부가됩니다. 그래서 이것은 어수선해질 수 있고'명백한 변수들 '과 같은 것들로 놀 필요가 있습니다. 모두 닫기; clc;'편의를 위해. 또는 [실행 구성] (http://www.mathworks.cn/help/techdoc/matlab_env/brqxeeu-131.html#brqxeeu-136) 기능을 사용할 수도 있습니다. 그러나 이러한 버전 관리 또는 다른 컴퓨터에서 추적하기가 번거로울 수 있습니다. 둘 다 장단점이 있습니다. – Egon

답변

11

아마도 완전히 권장하지는 않습니다. 입력 된 인수가 (nargin == 0)를 제공하지 않은 경우

function ExtremePoints = AnalyseData(ScanData) 
if nargin == 0 
    ScanData = evalin('base', 'ScanData'); 
end 
% do stuff 

이는 base 작업 공간에서 ScanData의 값을 끌어 방법은 다음과 같습니다.

evalevalin의 사용은 일반적으로 코드를 이해하고 재사용하기가 어렵 기 때문에 권장하지 않습니다.