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 のいずれかの数を返しますが、2 つ目のサイコロ (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 より前に導入