str2func
文字ベクトルから関数ハンドルを作成
説明
例
文字ベクトルを関数ハンドルに変換
文字ベクトル '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
str2func
と eval
の違いの確認
サイコロの目のシミュレーションに使用される 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)
p1
と p2
はともに同じ無名関数に関連付けられているように見えます。
関数ハンドルを呼び出します。p1
からの結果は 1 ~ 6 の間で変動します。p2
からの結果は常に 1 です。
p1() p2()
ans = 5 ans = 1
入力引数
str
— 関数ハンドルに変換するテキスト
関数名 | 無名関数の文字ベクトル表現 | 無名関数の string スカラー表現
関数ハンドルに変換するテキスト。関数名か、無名関数の文字ベクトル表現または string スカラー表現として指定します。
例: str = 'cos'
例: str = '@(x) x.^2'
ヒント
変数値を格納する関数ハンドルを
func2str
を使用して文字ベクトルに変換した後、str2func
で再びハンドルに変換した場合、元の変数値は維持されません。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
入力引数はコンパイル時に定数かつ既知でなければならない。
コード生成では、無名関数またはローカル関数を表す入力引数はサポートされない。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2006a より前に導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)