ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

str2func

文字列から関数ハンドルを作成

構文

  • fh = str2func(str)

説明

fh = str2func(str) は、関数名または無名関数を定義する文字列から関数ハンドル fh を構築します。

str2func で作成された関数ハンドルは、そのローカル ワークスペースの外にある変数や入れ子関数にアクセスできません。そのような変数や関数が含まれている関数ハンドルを呼び出すと、MATLAB® からエラーがスローされます。また、無名関数文字列を使用した場合、その結果の関数ハンドルはプライベート関数やローカル関数にアクセスできません。

すべて折りたたむ

文字列 'ones' を関数ハンドルに変換し、そのハンドルを使用して関数 ones を呼び出します。

str = 'ones';
fh = str2func(str)

fh(1,5)
fh = 

    @ones


ans =

     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 を返します。


% Copyright 2015 The MathWorks, Inc.

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 = 

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


p2 = 

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

p1p2 はともに同じ無名関数に関連付けられているように見えます。

関数ハンドルを呼び出します。p1 からの結果は 1 ~ 6 の間で変動します。p2 からの結果は常に 1 です。

p1()
p2()
ans =

     5


ans =

     1

入力引数

すべて折りたたむ

関数ハンドルに変換する文字列。関数名または無名関数文字列として指定します。

例: str = 'cos'

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

詳細

すべて折りたたむ

ヒント

  • 変数の値を格納する関数ハンドルを func2str で文字列に変換した後、str2func で再びハンドルに変換した場合、初期の変数値は維持されません。

R2006a より前に導入

この情報は役に立ちましたか?