Main Content

assignin

지정된 작업 공간의 변수에 값 할당

설명

assignin(ws,var,val)은 값 val을 작업 공간 ws의 변수 var에 대입합니다. 예를 들어, assignin('base','x',42)는 값 42를 MATLAB® 기본 작업 공간에 있는 변수 x에 대입합니다.

val의 값을 계산해야 하는 경우, MATLAB은 ws로 지정된 작업 공간이 아닌, assignin을 호출하는 함수에서 이 인수의 값을 계산합니다. val이 함수 핸들인 경우, 이는 assignin을 호출하는 함수에서 실행할 수 있어야 합니다.

assignin 함수는 다음 작업에 유용합니다.

  • 함수에서 기본 작업 공간으로 데이터 내보내기.

  • 함수 내에서 호출자 함수의 작업 공간에 정의된 변수의 값 변경. 예를 들어, 호출하는 함수의 인수 목록에 있는 변수의 값을 변경할 수 있습니다.

예제

예제

모두 축소

현재 작업 폴더에 있는 파일에서, 숫자 두 개를 추가한 후 기본 작업 공간에 있는 변수 fcnStatus에 값을 대입하는 함수를 만듭니다.

function c = myAdd(a,b)
    c = a+b;
    
    str = sprintf('%s called with %d,%d (%s)',mfilename,a,b,char(datetime));
    assignin('base','fcnStatus',str)
end

명령 프롬프트에서 함수를 호출합니다.

n = myAdd(2,3)
n =

     5

myAdd 함수가 기본 작업 공간에 할당한 fcnStatus 변수의 값을 표시합니다.

fcnStatus
fcnStatus =

    'myAdd called with 2,3 (17-Nov-2017 14:56:14)'

현재 작업 폴더에 있는 파일에서, 이름과 출생 연도를 입력할 수 있는 대화 상자를 표시하고 2050년도의 나이를 계산하는 함수를 만듭니다. assignin 함수는 값을 MATLAB 작업 공간 변수 nameage2050에 내보냅니다.

function mydialog
    prompt = {'Enter name:','Enter birth year:'};
    answer = inputdlg(prompt);
    
    n = answer{1};
    birthyear = str2double(answer{2});
    a = 2050-birthyear;
    
    assignin('base','name',n);
    assignin('base','age2050',a);
end

명령 프롬프트에서 함수를 실행하고 데이터를 입력한 후 확인을 클릭합니다.

mydialog

Screenshot of dialog box.

내보낸 값을 작업 공간 브라우저에서 봅니다.

입력 나이를 42로 변경하는 함수를 만듭니다. localfcn 내에서 assignin을 호출하면 메인 함수 updateAge의 작업 공간에 있는 a의 값이 변경됩니다.

function updateAge(a)
    validateattributes(a,{'numeric'},{'scalar'})
    fprintf('\tYour age: %d\n',a)
    localfcn
    fprintf('\tYour updated age: %d\n',a)
end

function localfcn
    assignin('caller','a',42)
end

명령 프롬프트에서 메인 함수를 호출합니다.

updateAge(37)
	Your age: 37
	Your updated age: 42

이 예제에서는 변수를 호출자 작업 공간에 할당하는 방법을 설명하지만, 로컬 함수 localfcn을 통해 업데이트된 나이를 출력 인수로 반환하는 것이 가장 좋습니다.

현재 작업 폴더에 있는 파일에서, 확률 배열의 최솟값을 구하는 함수를 만듭니다. assignfh 로컬 함수는 함수 핸들 fhminRand의 작업 공간에 할당합니다. minRand 함수는 입력 인수 n과 함께 fh를 실행합니다.

function m = minRand(n)
    assignfh
    
    A = fh(n)
    m = min(A(:));
end

function assignfh
    fh = @(dim)rand(dim);
    assignin('caller','fh',fh)
end

입력값 2를 사용하여 함수를 호출합니다.

m = minRand(2)
A =

    0.3486    0.1423
    0.0419    0.0766


m =

    0.0419

함수 핸들을 실행하면 난수로 구성된 2×2 배열을 얻게 됩니다.

이 함수의 다른 버전, 즉 minRand2를 만들어 보겠습니다. 여기에서는 로컬 함수가 함수 핸들 정의에서 rand 함수를 재정의합니다.

minRand 예제와 유사하게, assignfh2 로컬 함수는 fhminRand2의 작업 공간에 할당합니다. assignfh2 함수는 자신의 작업 공간 내에서 rand 함수를 변수 rand로 재정의하고 함수 핸들을 만듭니다. 이 동작은 익명 함수와 일치합니다. 즉, 함수 핸들은 이를 만들 당시에 사용 가능한 변수를 사용하여 만들어집니다. 따라서, minRand2에서 함수 핸들을 실행하면 nassignfh2에 정의된 rand 배열의 요소를 참조하게 됩니다.

function m = minRand2(n)
    assignfh2(n)
    
    A = fh(n)
    m = min(A(:));
end

function assignfh2(n)
    rand = 13*ones(n);
    fh = @(dim)rand(dim);
    assignin('caller','fh',fh)
end

입력값 2를 사용하여 함수를 호출합니다.

m = minRand2(2)
A =

    13


m =

    13

익명 함수를 호출자 작업 공간에 할당할 때, MATLAB은 함수 핸들의 정의를 호출자 작업 공간의 변수에 넣습니다. assignin에 대한 호출이 포함된 함수가 함수 핸들을 실행합니다. 이 예제에서는 변수를 호출자 작업 공간에 할당하는 방법을 설명하지만, 로컬 함수 assignfh를 통해 함수 핸들을 출력 인수로 반환하는 것이 가장 좋습니다.

입력 인수

모두 축소

작업 공간으로, 'base' 또는 'caller'로 지정됩니다.

MATLAB 기본 작업 공간 내에 값을 할당하려면 'base'를 사용하십시오. 명령줄 또는 편집기에서 스크립트를 실행한다고 가정할 때, 기본 작업 공간에는 MATLAB 명령 프롬프트에서 사용자가 생성하는 변수(스크립트에서 생성하는 변수 포함)가 저장됩니다.

호출자 함수의 작업 공간에 변수를 할당하려면 'caller'를 사용하십시오. 호출자 작업 공간은 현재 실행 중인 함수를 호출한 함수의 작업 공간입니다. 예를 들어, funAfunB를 호출한다고 가정하겠습니다. funB의 호출자 작업 공간은 funA입니다. 따라서, assignin을 사용하고 작업 공간을 'caller'로 지정하여 funB에서 funA에 있는 변수에 값을 할당할 수 있습니다.

참고

호출자 작업 공간에 있는 변수에 할당할 경우 코드를 이해하기가 더 어려워질 수 있으므로, 사용자는 뜻밖의 결과(작업 공간의 예상하지 못한 변수 또는 다시 정의된 변수)를 얻게 되며 성능에 부정적인 영향을 미칩니다. 함수를 통해 변수를 출력 인수로 반환하는 것이 가장 좋습니다.

다음과 같은 경우에는 기본 작업 공간과 호출자 작업 공간이 동일합니다.

  • 명령 프롬프트에서 함수를 호출하고 메인 함수가 assignin을 호출할 경우.

  • 명령 프롬프트에서 assignin을 호출할 경우.

데이터형: char | string

변수 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다. var이 지정된 작업 공간에 존재하지 않을 경우, assignin 함수가 이를 만듭니다.

데이터형: char | string

변수의 값으로, 스칼라 또는 배열 값으로 지정됩니다. val은 어떤 데이터형이든 될 수 있으며, MATLAB 표현식을 포함할 수 있습니다.

변수의 값을 계산해야 하는 경우 MATLAB은 ws로 지정된 작업 공간이 아닌 assignin에 대한 호출을 포함한 함수에 있는 표현식을 실행합니다. val이 함수 핸들인 경우, 이는 assignin을 호출하는 함수에서 실행할 수 있어야 합니다.

예: 5

예: 'hello'

예: rand(3,7)

예: @cos

  • assignin 함수는 배열의 특정 요소에 값을 할당하지 않습니다. 따라서 var은 배열 인덱스를 포함할 수 없습니다. 이 코드는 오류가 발생합니다.

    X = 1:8;
    assignin('base','X(3:5)',-1);
    

    배열의 특정 요소에 값을 할당하려면 evalin 함수를 사용하십시오.

    evalin('base','X(3:5) = -1')
    

확장 기능

버전 내역

R2006a 이전에 개발됨