本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

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

创建一个返回两个函数句柄的函数,用于模拟掷骰子。第一个骰子 (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

输入参数

全部折叠

要转换为函数句柄的文本,指定为函数名称或者匿名函数的字符向量或字符串标量表示。

示例: str = 'cos'

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

提示

  • 若使用 func2str 将存储变量值的函数句柄转换为字符向量,然后使用 str2func 将其转换回句柄,则该函数句柄不会保留所存储变量的原始值。

扩展功能

在 R2006a 之前推出