Main Content

str2func

문자형 벡터에서 함수 핸들 생성

설명

예제

fh = str2func(str)은 함수 이름 또는 익명 함수의 텍스트 표현에서 함수 핸들 fh를 생성합니다.

str2func를 사용하여 생성한 함수 핸들은 로컬 작업 공간 외부의 변수 또는 중첩 함수에 액세스할 수 없습니다. 함수 핸들에 이러한 변수나 함수가 포함되어 있는 경우 핸들을 불러오면 MATLAB®에서 오류가 발생합니다. 또한 익명 함수의 텍스트 표현을 사용할 경우 결과로 생성되는 함수 핸들은 프라이빗 함수 또는 로컬 함수에 액세스할 수 없습니다.

예제

모두 축소

문자형 벡터 'ones'를 함수 핸들로 변환하고 핸들을 사용하여 ones 함수를 호출합니다.

c = 'ones';
fh = str2func(c)
fh = function_handle with value:
    @ones

fh(1,5)
ans = 1×5

     1     1     1     1     1

익명 함수를 나타내는 문자형 벡터를 함수 핸들로 변환합니다. 작업 공간 변수는 str2func 함수에서 사용할 수 없습니다. 따라서 표현식을 실행하는 데 필요하지만 함수 입력값으로 정의되지 않은 값을 문자형 벡터에 포함시키십시오.

익명 함수 7x – 13을 나타내는 문자형 벡터를 정의합니다. 문자형 벡터를 함수 핸들로 변환합니다.

str = '@(x)7*x-13';
fh = str2func(str)
fh = 

    @(x)7*x-13

핸들을 사용하여 익명 함수를 호출합니다.

fh(3)
ans =

     8

문자형 벡터에 작업 공간 변수를 포함시키면 str2func는 함수 핸들을 생성하지만, 이 함수 핸들을 불러오면 MATLAB에서 오류가 발생합니다.

a = 13;
str = '@(x)7*x-a';
fh = str2func(str);

fh(3)
Undefined function or variable 'a'.

Error in @(x)7*x-a

주사위 굴리기 시뮬레이션에 사용되는 2개의 함수 핸들을 반환하는 함수를 만듭니다. 첫 번째 주사위(d1)는 1에서 6 사이에 있는 숫자를 반환하지만 두 번째 주사위(d2)는 항상 숫자 1을 반환합니다.

MATLAB 경로에 있는 폴더에 다음 함수를 만듭니다. str2func가 익명 함수를 나타내는 문자형 벡터와 함께 사용될 경우 로컬 함수에 액세스할 수 없습니다. 따라서 MATLAB은 내장 함수 randi를 호출하고 1에서 6 사이에 있는 숫자를 반환합니다. eval 함수가 로컬 함수에 액세스할 수 있기 때문에 d2는 오버로드된 randi를 사용하고 항상 1을 반환합니다.

function [d1,d2] = diceRoll
str = '@()randi([1 6],1)';
d1 = str2func(str);
d2 = eval(str);
end

function r = randi(~,~)
r = 1;
end

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

[p1,p2] = diceRoll
p1 =

  function_handle with value:

    @()randi([1,6],1)


p2 =

  function_handle with value:

    @()randi([1,6],1)

p1p2가 모두 동일한 익명 함수와 연관된 것으로 보입니다.

함수 핸들을 불러옵니다. p1의 결과는 1에서 6 사이입니다. p2의 결과는 항상 1입니다.

p1()
p2()
ans =

     5


ans =

     1

입력 인수

모두 축소

함수 핸들로 변환할 텍스트로, 함수 이름, 익명 함수의 문자형 벡터 표현 또는 익명 함수의 string형 스칼라 표현으로 지정됩니다.

예: str = 'cos'

예: str = '@(x) x.^2'

  • func2str을 사용하여 텍스트를 문자형 벡터로 변환한 다음 str2func를 사용하여 다시 핸들로 변환할 경우, 변수 값을 저장하는 함수 핸들은 원래 값을 유지하지 않습니다.

확장 기능

버전 내역

R2006a 이전에 개발됨

참고 항목

|