11.10函数文件

除了简单的一次性程序外,每次需要时都必须定义所需的所有函数是不现实的。相反,您通常希望将它们保存在一个文件中,以便轻松编辑它们,并保存它们以备日后使用。

Octave不要求您在使用函数定义之前先从文件中加载它们。您只需要将函数定义放在Octave可以找到它们的地方。

当Octave遇到未定义的标识符时,它首先查找已经编译并当前列在其符号表中的变量或函数。如果在那里找不到定义,则会搜索目录列表(路径)对于结尾为的文件.m具有与未定义标识符相同的基本名称。5一旦Octave找到一个名称匹配的文件,就会读取该文件的内容。如果它定义了single函数,它被编译和执行。详见脚本文件,了解有关如何在一个文件中定义多个函数的详细信息。

当Octave从函数文件中定义函数时,它会保存读取的文件的全名和文件上的时间戳。如果文件上的时间戳发生更改,Octave可能会重新加载该文件。当Octave以交互方式运行时,时间戳检查通常在每次Octave打印提示时最多进行一次。如果当前工作目录发生更改,也会搜索新的函数定义。

通过检查时间戳,您可以在Octave运行时编辑函数的定义,并自动使用新的函数定义,而无需重新启动Octave会话。

为了避免通过检查不太可能更改的时间戳函数而不必要地降低性能,Octave假设目录树中的函数文件octave-home/share/octave/version/m不会更改,因此不必每次使用这些文件中定义的函数时都检查它们的时间戳。这通常是一个非常好的假设,并且为使用Octave分发的函数文件提供了显著的性能改进。

如果您知道在运行Octave时您自己的函数文件不会更改,则可以调用ignore_function_time_stamp ("all"),这样Octave将忽略所有函数文件的时间戳。传入"system"参数到该函数将重置默认行为。

 
: edit name
: edit field value
: value = edit ("get", field)
: value = edit ("get", "all")

编辑命名函数,或更改编辑器设置。

如果edit以文件或函数的名称作为参数调用,它将在默认的文本编辑器中打开。当使用 Octave GUI时,默认编辑器在Preferences中的Editor选项卡中指定。CLI的默认编辑器由 EDITOR函数指定。

  • 如果函数name在您路径中的文件中可用,然后它将在编辑器中打开。如果未找到任何文件,则使用m文件变体,结尾为".m",将被考虑。如果仍然找不到文件,则带有前导"@"的变体将被考虑,然后带有前导"@"和结尾为".m"的文件将被考虑。
  • 如果name是命令行函数的名称,则将创建一个m文件来包含该函数及其当前定义。
  • 如果name.cc,则它将在路径中搜索name.cc,然后在编辑器中打开它。如果找不到文件,则创建新的.cc文件。如果name恰好是一个m文件或命令行函数,那么该函数的文本将作为注释插入.cc文件中。
  • 如果name.ext在路径中,则它将被编辑,否则编辑器将以name.ext在当前目录中作为文件名。

    警告您可能需要在新的定义可用之前清除name。如果您正在编辑.cc文件,则需要在定义可用之前执行mkoctfilename.cc

如果edit使用调用fieldvalue变量,控制字段的值field将设置为value.

如果指定了输出参数,第一个输入参数为 get ,此后 edit将返回 field控制字段的值. 如果控制字段不存在,编辑将返回包含所有字段和值的结构体. 因此, edit ("get", "all") 返回完整的控制结构体。

使用以下控制字段:

author

这是要放在新函数的“##作者:”字段后面的名称。默认情况下,它从密码数据库的gecos字段中猜到。

email

这是要在“作者”字段中的名称后面列出的电子邮件地址。默认情况下,它猜测<$LOGNAME@$HOSTNAME>,如果$HOSTNAME未定义就使用uname -n。你可能想覆盖这个值。一定要使用格式.

广告
license
gpl

GNU通用公共许可证(默认)。

广告
bsd

BSD风格的许可证,无广告条款。

广告
pd

公共field。

广告
"text"

您自己的默认版权和许可证。

广告

除非您指定pd,编辑将在版权声明前加上“版权(C)YYYY作者”。

广告
mode

该值确定编辑器是应在异步模式(编辑器在后台启动,Octave继续)还是同步模式(Octave等待直到编辑器退出)下启动。将其设置为"sync"以同步模式启动编辑器。默认为"async"详见system).

广告
editinplace

确定是否应在位编辑文件,而不考虑文件是否可修改。默认为true。将其设置为false将只读函数文件自动复制到home,如果存在,则在编辑它们时。

广告
home

此值表示在编辑器中打开系统m文件之前应将其复制到的目录。这样做的目的是,这个目录也在路径中,这样系统函数文件的编辑副本就会覆盖原始文件。此设置仅在editinplace设置为false。默认为空矩阵([]),这意味着它没有被使用。以前版本的Octave中的默认值为~/octave.

广告

详见: EDITOR, path.

广告
 
: mfilename ()
: mfilename ("fullpath")
: mfilename ("fullpathext")

返回当前正在执行的文件的名称。

返回当前执行的脚本或函数的基本名称时不带任何扩展名。如果从m文件外部(如命令行)调用,则返回空字符串。

给定参数"fullpath",包括文件名的目录部分,但不包括扩展名。

给定参数"fullpathext",包括文件名的目录部分和扩展名。

详见: inputname, dbstack.

广告
 
: 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将始终检查文件上的时间戳,以确定是否需要编译函数文件中定义的函数。

广告

脚注

5.

这个.m后缀是为了与兼容而选择的MATLAB.


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

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