이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

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 이전에 개발됨