11.12.1 函数句柄

函数句柄是指向另一个函数的指针,使用以下语法定义:

@function-name

例如:

f = @sin;

上述代码创建了一个名为 f 的函数句柄,它指向函数 sin

函数句柄用于间接调用其他函数,或将函数作为参数传递给另一个函数(如 quadfsolve)。例如:

f = @sin;
quad (f, 0, pi)
    ⇒  2

您可以使用 feval 通过函数句柄调用函数,或者直接写上函数句柄的名称后跟参数列表。如果没有参数,则必须使用空的参数列表 ()。例如:

f = @sin;
feval (f, pi/4)
    ⇒  0.70711
f (pi/4)
    ⇒  0.70711
 
tf = is_function_handle (x)

如果 x 是函数句柄,则返回 true。

另请参阅: isatypeinfoclassfunctions

 
s = functions (fcn_handle)

返回一个结构体,其中包含关于函数句柄 fcn_handle 的信息。

结构体 s 始终包含以下三个字段:

function

函数名称。对于匿名函数(无名称),这将是实际的函数定义。

type

函数的类型。

anonymous

该函数是匿名的。

private

该函数是私有的。

overloaded

该函数重载了现有函数。

simple

该函数是一个内置函数或 m 文件函数。

subfunction

该函数是 m 文件中的一个子函数。

nested

该函数是嵌套的。

file

将被调用以执行该函数的 m 文件。对于匿名函数和内置函数,此字段为空。

此外,某些函数类型可能会在其他字段中返回更多信息。

警告: functions 仅用于调试目的。其行为可能会在未来版本中发生变化,程序不应依赖于任何特定的输出格式。

另请参阅: func2strstr2func

 
str = func2str (fcn_handle)

返回一个字符串,其中包含函数句柄 fcn_handle 所引用的函数的名称。

另请参阅: str2funcfunctions

 
hfcn = str2func (str)

返回从字符串 str 构造的函数句柄。

输入可以是函数的名称(例如 "sin"),也可以是定义函数的字符串(例如 "@(x) sin (x + pi)")。

编程注意事项:在大多数情况下,最好使用匿名函数语法,让 Octave 解析器来创建函数句柄,而不是使用 str2func。例如:

hfcn = @sin ;
hfcn = @(x) sin (x + pi) ;

另请参阅: func2strfunctions

 
vars = symvar (str)

识别字符串 str 中的符号变量名称。

常见常量名称(如 ijpiInf)以及 Octave 函数(如 sinplot)将被忽略。

所识别出的任何名称将以字符串元胞数组的形式返回。如果未找到变量,则数组为空。

示例:

symvar ("x^2 + y^2 == 4")
⇒   {
     [1,1] = x
     [2,1] = y
   }

版权所有 © 2024-2026 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-4