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
之间的差异
创建一个返回两个函数句柄的函数,用于模拟掷骰子。第一个骰子 (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)
p1
和 p2
都显示为与同一匿名函数相关联。
调用这些函数句柄。来自 p1
变量的结果为 1 和 6 之间的一个数字。来自 p2
的结果始终为 1。
p1() p2()
ans = 5 ans = 1
输入参数
str
— 要转换为函数句柄的文本
函数名称 | 匿名函数的字符向量表示 | 匿名函数的字符串标量表示
要转换为函数句柄的文本,指定为函数名称或者匿名函数的字符向量或字符串标量表示。
示例: 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)