11.10.1 操作加载路径

当调用函数时,Octave 会搜索一个目录列表,查找包含该函数声明的文件。这个目录列表称为加载路径(load path)。默认情况下,加载路径包含 Octave 自带的目录列表以及当前工作目录。要查看当前的加载路径,请在不带任何输入或输出参数的情况下调用 path 函数。

可以使用 addpathrmpath 向加载路径添加目录或从中移除目录。例如,以下代码将 ~/Octave 添加到加载路径。

addpath ("~/Octave")

此后,Octave 将搜索 ~/Octave 目录中的函数。

 
addpath (dir1, …)
addpath (dir1, …, option)
oldpath = addpath (…)

将指定的目录添加到函数搜索路径中。

如果 option"-begin" 或 0(默认值),则将目录名前置到当前路径之前。如果 option"-end" 或 1,则将目录名追加到当前路径之后。添加到路径中的目录必须存在。

除了接受单个目录参数外,也接受由 pathsep 分隔的目录名列表。例如:

addpath ("dir1:/dir2:~/dir3")

新添加的路径在加载路径中的出现顺序与它们在 addpath 参数中的顺序相同。当向加载路径的前端扩展时,参数列表中的最后一个路径最先被添加。当向加载路径的末尾扩展时,参数列表中的第一个路径最先被添加。

对于每个被添加且尚未在路径中的目录,addpath 会检查是否存在名为 PKG_ADD 的文件(注意没有 .m 扩展名),如果存在则运行它。

另请参阅: pathrmpathgenpathpathdefsavepathpathsep

 
pathstr = genpath (dir)
pathstr = genpath (dir, skipdir1, …)

返回由 dir 及其所有子目录构成的路径。

该路径不包含包目录(以 + 开头)、旧式类目录(以 @ 开头)、private 目录,以及这些类型的任何子目录。

如果给出了额外的字符串参数,则生成的路径将排除具有这些名称的目录。

另请参阅: pathaddpath

 
rmpath (dir1, …)
oldpath = rmpath (dir1, …)

从当前函数搜索路径中移除 dir1、…。

除了接受单个目录参数外,也接受由 pathsep 分隔的目录名列表。例如:

rmpath ("dir1:/dir2:~/dir3")

对于每个被移除的目录,rmpath 会检查是否存在名为 PKG_DEL 的文件(注意没有 .m 扩展名),如果存在则运行它。

另请参阅: pathaddpathgenpathpathdefsavepathpathsep

 
savepath
savepath file
status = savepath (…)

将当前函数搜索路径中用户自定义的部分保存到 file 中。

保存在 file 中的文件夹列表包括为 Octave 自身函数添加的文件夹、属于 Octave 包(参见 pkg load)的文件夹以及通过命令行开关添加的文件夹。

如果省略 file,Octave 会在当前目录中查找项目特定的 .octaverc 文件来保存路径信息。如果不存在此类文件,则使用用户的配置文件 ~/.octaverc

如果成功,savepath 返回 0。

savepath 函数使得自定义用户的配置文件以恢复特定 Octave 实例所需的工作路径变得简单。假设未指定文件名,Octave 将在启动时自动从相应的 .octaverc 文件恢复已保存的目录路径。如果指定了文件名,则可以通过调用 source file 手动恢复路径。

另请参阅: pathaddpathrmpathgenpathpathdef

 
path ()
str = path ()
str = path (path1, …)

修改或显示 Octave 的加载路径。

如果 narginnargout 均为零,则以易于阅读的格式显示 Octave 加载路径中的元素。

如果 nargin 为零且 nargout 大于零,则返回当前加载路径。

如果 nargin 大于零,则连接各参数,用 pathsep 分隔它们。将内部搜索路径设置为结果,并返回该结果。

不检查重复元素。

另请参阅: addpathrmpathgenpathpathdefsavepathpathsep

 
val = pathdef ()

返回 Octave 的默认路径。

路径信息从以下四个来源之一提取。可能的来源按优先级顺序排列为:

  1. .octaverc
  2. ~/.octaverc
  3. <OCTAVE_HOME>/…/<version>/m/startup/octaverc
  4. 任何 octaverc 文件修改之前的 Octave 路径。

另请参阅: pathaddpathrmpathgenpathsavepath

 
val = pathsep ()

查询用于分隔路径中目录的字符。

另请参阅: filesep

 
rehash ()

重新初始化 Octave 的加载路径目录缓存。

 
fname = file_in_loadpath (file)
fname = file_in_loadpath (file, "all")

如果在 path 指定的目录列表中能找到 file,则返回其绝对路径名。

如果未找到文件,则返回空字符串。

file 已经是绝对路径名时,会在文件系统中检查该名称,而不是在 Octave 的加载路径中查找。在这种情况下,如果 file 存在,则将其返回给 fname,否则返回空字符串。

如果第一个参数是字符串元胞数组,则搜索加载路径中的每个目录,查找元胞数组中的每个元素,并返回第一个匹配项。

如果提供了可选的第二个参数 "all",则返回一个元胞数组,包含路径中所有同名文件组成的列表。如果未找到文件,则返回空的元胞数组。

另请参阅: file_in_pathdir_in_loadpathpath

 
pathstr = restoredefaultpath ()

将 Octave 的路径恢复到启动时的初始状态。

重新初始化后的路径作为输出返回。

另请参阅: pathaddpathrmpathgenpathpathdefsavepathpathsep

 
pathstr = command_line_path ()

返回 Octave 解释器启动时在命令行中给出的路径参数(--path arg)。

另请参阅: pathaddpathrmpathgenpathpathdefsavepathpathsep

 
dirname = dir_in_loadpath (dir)
dirname = dir_in_loadpath (dir, "all")

如果在 path 指定的目录列表中能找到与 dir 匹配的加载路径元素,则返回其绝对路径名。

如果未找到匹配项,则返回空字符串。

匹配是在每个路径元素的末尾进行的。例如,如果 dir"foo/bar",它能匹配路径元素 "/some/dir/foo/bar",但不能匹配 "/some/dir/foo/bar/baz""/some/dir/allfoo/bar"。当 dir 是绝对路径名而非仅仅是路径片段时,会在文件系统中进行匹配,而不是在 Octave 的加载路径中查找。在这种情况下,如果 dir 存在,则将其返回给 dirname,否则返回空字符串。

如果提供了可选的第二个参数,则返回包含所有名称匹配项的元胞数组,而不仅仅是第一个。

另请参阅: file_in_pathfile_in_loadpathpath

 
current_encoding = mfile_encoding ()
mfile_encoding (new_encoding)
old_encoding = mfile_encoding (new_encoding)

查询或设置用于读取 m 文件的编码。

输入和输出是指定编码名称的字符串,例如 "utf-8"

Octave 的解析器在读取 m 文件时使用此编码,除非已通过 dir_encoding 函数或该目录中的 .oct-config 文件为包含 m 文件的特定目录设置了不同的编码。

特殊值 "system" 选择与系统区域设置匹配的编码。

如果在 m 文件已被解析后更改了 m 文件编码,则必须重新解析这些文件才能使更改生效。这可以通过 clear all 命令来触发。

此外,此编码还用于在 Octave 的 GUI 中使用内置编辑器加载和保存文件。

另请参阅: dir_encoding

 
current_encoding = dir_encoding (dir)
dir_encoding (dir, new_encoding)
dir_encoding (dir, "delete")
old_encoding = dir_encoding (dir, new_encoding)

查询或设置用于读取 dir 中 m 文件的 encoding 编码。

每个目录的编码会覆盖(全局设置的)m 文件编码,请参见 mfile_encoding

字符串 DIR 必须与目录在加载路径中显示的方式一致。

new_encoding 输入必须是有效的编码标识符或 "delete"。在后一种情况下,任何每个目录的编码都将被删除,并且(全局设置的)m 文件编码将用于给定的 dir

只有在请求输出参数时,才会返回当前或先前使用的编码。

当新路径添加到加载路径时(例如通过 addpath),目录编码会自动从 .oct-config 文件中读取。要为同一文件夹中的所有文件设置编码,该文件必须包含以 "encoding=" 开头的一行,后跟编码标识符。

例如,要将同一文件夹中所有文件的文件编码设置为 ISO 8859-1(Latin-1),请创建一个包含以下内容的 .oct-config 文件:

encoding=iso8859-1

如果文件编码在文件已被解析之后更改,则必须重新解析文件才能使更改生效。这可以通过 clear all 命令来完成。

另请参阅: addpathpathmfile_encoding


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

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