函数可以被重载以处理不同的输入参数。例如,运算符 ’+’ 已在 Octave 中被重载,用于处理 single、double、uint8、int32 以及许多其他参数。重载函数的首选方式是通过类和面向对象编程(另请参阅函数重载)。然而,有时需要撤销用户定义的重载,并调用与特定类型关联的默认函数。为此,存在 builtin 函数。
[…] = builtin (f, …) ¶即使 f 被重载为给定类型签名的另一个函数,也调用其基函数 f。
这在进行面向对象编程时通常很有用,并且需要调用 Octave 的基函数,而不是新类的重载函数。
一个简单的示例,它将 sin 函数重新定义为 cos 函数,展示了 builtin 的工作方式。
sin (0)
⇒ 0
function y = sin (x), y = cos (x); endfunction
sin (0)
⇒ 1
builtin ("sin", 0)
⇒ 0
单个动态链接文件可能定义多个函数。但是,由于 Octave 根据函数的文件名搜索函数,因此 Octave 需要一种在动态链接文件中查找每个函数的方法。在支持符号链接的操作系统上,可以为文件中包含的每个函数创建指向原始文件的符号链接。
然而,至少有一个众所周知的操作系统不支持符号链接。为每个函数复制原始文件是不可取的,因为这会增加 Octave 使用的磁盘空间。相反,Octave 提供了 autoload 函数,允许用户定义某个函数将从哪个文件中加载。
autoload_map = autoload () ¶(function, file) ¶(…, "remove") ¶将 function 定义为从 file 自动加载。
第二个参数 file 应该是绝对文件名,或者是与运行自动加载命令的函数或脚本位于同一目录中的文件名。file 不应 依赖 Octave 的加载路径。
通常,对 autoload 的调用出现在 PKG_ADD 脚本文件中,这些文件在将目录添加到 Octave 的加载路径时被执行。为了避免在 file 中硬编码目录名,如果 file 与 PKG_ADD 脚本在同一目录中,则
autoload ("foo", "bar.oct");
将从文件 bar.oct 加载函数 foo。如果 bar.oct 不在同一目录中,或使用如下用法
autoload ("foo", file_in_loadpath ("bar.oct"))
则强烈不推荐,因为其行为可能是不可预测的。
不带任何参数时,返回一个包含当前自动加载映射的结构体。
如果给出第三个参数 "remove",则清除该函数,并在当前的 Octave 会话期间不再加载。
另请参阅: PKG_ADD。
版权所有 © 2024-2026 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-4