主要内容

str2func

从字符向量构造函数句柄

描述

例子

Fh = str2func(str构造一个函数句柄,跳频,从函数名或匿名函数的文本表示中获取。

使用str2func不能访问本地工作区之外的变量或嵌套函数。如果你的函数句柄包含这些变量或函数,MATLAB®在调用句柄时抛出错误。此外,如果使用匿名函数的文本表示形式,则生成的函数句柄不能访问私有函数或本地函数。

例子

全部折叠

转换字符向量“的”函数句柄,并调用函数使用句柄。

c =“的”;Fh = str2func(c)
跳频=Function_handle with value:@ones
跳频(1、5)
ans =1×51 1 1 1 1 1

将表示匿名函数的字符向量转换为函数句柄。的工作区变量不可用str2func函数。因此,在字符向量中包含计算表达式所必需的值,并且这些值没有定义为函数输入。

定义一个表示匿名函数的字符向量7x- 13.将字符向量转换为函数句柄。

str =“@ (x) 7 * x-13”;Fh = str2func(str)
Fh = @(x)7*x-13

使用句柄调用匿名函数。

跳频(3)
Ans = 8

如果在字符向量中包含工作区变量,str2func创建函数句柄,但MATLAB在调用函数句柄时抛出错误。

A = 13;str =“@ x (x) 7 *”;Fh = str2func(str);跳频(3)
未定义的函数或变量'a'。@(x)7*x-a错误

创建一个函数,返回两个用于模拟掷骰子的函数句柄。第一个骰子(d1)返回从1到6的数字,但第二个骰子(d2)总是返回数字1。

在MATLAB路径下的文件夹中创建以下函数。当str2func与表示匿名函数的字符向量一起使用时,它不能访问本地函数。因此,MATLAB调用内置的兰迪函数,并返回从1到6的数字。的eval函数可以访问本地函数,所以d2使用重载兰迪并且总是返回1。

函数[d1,d2] = dicerroll str =' @()兰迪([1 - 6],1)”;D1 = str2func(str);D2 = eval(str);结束函数R = randi(~,~) R = 1;结束

在命令提示符下,调用diceRoll函数。

[p1,p2] = dicerroll
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 = 'cos'

例子:STR = '@(x) x.^2'

提示

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

扩展功能

另请参阅

|

R2006a之前介绍