除了简单的一次性程序之外,每次需要时都重新定义所有函数是不现实的。相反,您通常希望将它们保存在文件中,以便轻松编辑并保留以备将来使用。
Octave 不要求您在使用函数定义之前先从文件加载它们。您只需将函数定义放在 Octave 能够找到的位置即可。
当 Octave 遇到一个未定义的标识符时,它会首先查找已编译并当前列在符号表中的变量或函数。如果在符号表中找不到定义,它会搜索一个目录列表(称为路径),查找以 .m 结尾且基本名称与未定义标识符相同的文件。5 一旦 Octave 找到名称匹配的文件,就会读取该文件的内容。如果该文件定义了一个单一函数,那么它会被编译并执行。有关如何在一个文件中定义多个函数的详细信息,请参阅 脚本文件。
当 Octave 从函数文件定义函数时,它会保存所读取文件的完整路径名以及文件的时间戳。如果文件的时间戳发生变化,Octave 可能会重新加载该文件。在以交互方式运行时,Octave 通常每次打印提示符时最多检查一次时间戳。如果当前工作目录发生更改,也会搜索新的函数定义。
通过检查时间戳,您可以在 Octave 运行期间编辑函数的定义,并自动使用新的函数定义,而无需重新启动 Octave 会话。
为了避免因检查不太可能变化的函数的时间戳而降低性能,Octave 假定目录树 octave-home/share/octave/version/m 中的函数文件不会更改,因此不必在每次使用这些文件中定义的函数时都检查它们的时间戳。这是一个非常好的假设,并为 Octave 分发的函数文件带来了显著的性能提升。
如果您知道自己的函数文件在运行 Octave 期间不会更改,可以通过调用 ignore_function_time_stamp ("all") 来提高性能,这样 Octave 将忽略所有函数文件的时间戳。向该函数传递 "system" 参数可恢复默认行为。
name ¶field value ¶value = edit ("get", field) ¶value = edit ("get", "all") ¶编辑指定的函数,或更改编辑器设置。
如果以文件或函数名称作为参数调用 edit,它将在默认文本编辑器中打开该文件。Octave GUI 的默认编辑器在首选项的"编辑器"选项卡中指定。CLI 的默认编辑器由 EDITOR 函数指定。
".m" 结尾的 m 文件变体。如果仍然未找到,则会依次尝试以 "@" 开头的变体,以及同时以 "@" 开头和以 ".m" 结尾的变体。
name.cc,则会在路径中搜索 name.cc 并在编辑器中打开。如果未找到该文件,则创建一个新的 .cc 文件。如果 name 恰好是一个 m 文件或命令行函数,则该函数的文本会作为注释插入到 .cc 文件中。
警告:在新定义可用之前,您可能需要使用 clear name 清除旧定义。如果您正在编辑 .cc 文件,则需要先执行 mkoctfile name.cc,该定义才会可用。
如果使用 field 和 value 参数调用 edit,则控制字段 field 的值将被设置为 value。
如果请求了输出参数,并且第一个输入参数是 get,则 edit 将返回控制字段 field 的值。如果该控制字段不存在,edit 将返回一个包含所有字段和值的结构体。因此,edit ("get", "all") 返回完整的控制结构体。
以下是可用的控制字段:
这是放在新函数中 "## Author:" 字段后面的名称。默认情况下,它从密码数据库的 gecos 字段中推测得出。
这是在作者字段中列在名称后面的电子邮件地址。默认情况下,它推测为 <$LOGNAME@$HOSTNAME>,如果 $HOSTNAME 未定义,则使用 uname -n。您可能希望覆盖此设置。请务必使用 user@host 格式。
GNU 通用公共许可证(默认)。
BSD 风格许可证(无广告条款)。
公共领域(Public Domain)。
您自己的默认版权和许可证文本。
除非您指定了 pd,否则 edit 会在版权声明前加上 "Copyright (C) YYYY Author"。
该值决定编辑器是以异步模式(编辑器在后台启动,Octave 继续执行)还是同步模式(Octave 等待直到编辑器退出)启动。设置为 "sync" 以同步模式启动编辑器。默认为 "async"(另请参阅 system)。
决定是否原地编辑文件,而不考虑文件是否可修改。默认值为 true。设置为 false 时,编辑只读函数文件时会自动将其复制到 home 目录(如果已设置)。
此值指定在编辑器中打开系统 m 文件之前应将其复制到的目录。这样做的目的是该目录也在路径中,从而使系统函数文件的编辑副本覆盖原始文件。此设置仅在 editinplace 设置为 false 时使用。默认值为空矩阵([]),表示不使用此功能。在 Octave 的早期版本中,默认值为 ~/octave。
() ¶("fullpath") ¶("fullpathext") ¶返回当前正在执行的文件的名称。
返回当前执行的脚本或函数的基本名称,不包含任何扩展名。如果在 m 文件外部(例如在命令行中)调用,则返回空字符串。
如果指定参数 "fullpath",则包含文件名的目录部分,但不包含扩展名。
如果指定参数 "fullpathext",则包含文件名的目录部分以及扩展名。
val = ignore_function_time_stamp () ¶old_val = ignore_function_time_stamp (new_val) ¶查询或设置控制 Octave 每次查找函数文件中定义的函数时是否检查文件时间戳的内部变量。
如果内部变量设置为 "system",Octave 不会自动重新编译 octave-home/share/version/m 子目录中已更改的函数文件,但会重新编译搜索路径中其他已更改的函数文件。
如果设置为 "all",Octave 不会重新编译任何函数文件,除非使用 clear 删除了它们的定义。
如果设置为 "none",Octave 将始终检查文件的时间戳,以确定函数文件中定义的函数是否需要重新编译。
版权所有 © 2024-2026 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-4