DOKK / manpages / debian 11 / manpages-zh / library.3tcl.zh_CN
library(3tcl) Tcl Built-In Commands library(3tcl)


auto_execok, auto_import, auto_load, auto_mkindex, auto_mkindex_old, auto_qualify, auto_reset, tcl_findLibrary, parray, tcl_endOfWord, tcl_startOfNextWord, tcl_startOfPreviousWord, tcl_wordBreakAfter, tcl_wordBreakBefore - standard library of Tcl procedures

总览 SYNOPSIS

auto_execok cmd
auto_import pattern
auto_load cmd
auto_mkindex dir pattern pattern ...
auto_mkindex_old dir pattern pattern ...
auto_qualify command namespace
auto_reset
tcl_findLibrary basename version patch initScript enVarName varName
parray arrayName
tcl_endOfWord str start
tcl_startOfNextWord str start
tcl_startOfPreviousWord str start
tcl_wordBreakAfter str start
tcl_wordBreakBefore str start

介绍 INTRODUCTION

Tcl 为公共需求的功能包含了一个 Tcl 过程库。在 Tcl 库中定义的过程是适用于多种不同的应用的通用过程。用 info library 命令返回 Tcl 库的位置。除了这个 Tcl 库之外,每个应用通常都有它自己的支持过程库;这个库的位置通常用 $app_library 全局变量的值给出,这里 app 是应用的名字。例如,Tk 库的位置保持在变量 $tk_library 中。

要访问在 Tcl 库中的过程,一个应用应该 source (载入)库中的文件 init.tcl,例如,Tcl 命令

source [file join [info library] init.tcl]
如果在一个应用的 Tcl_AppInit 过程中调用了库过程 Tcl_Init,则这(个加载)将自动发生。在 init.tcl 中的代码将定义 unknown 过程和使用下面定义的自动装载机制安排其他过程在需要时装载。

命令过程 COMMAND PROCEDURES

在 Tcl 库中提供了下列过程:

确定是否有一个叫 cmd 的一个可执行文件或 shell 内置命令。如果有,它返回要传递给 exec 来执行这个叫 cmd 的可执行文件或 shell 内置命令的那些参数的一个列表。如果没有,它返回一个空串。这个命令检查在当前查找路径中目录(由 PATH 环境变量给出),在其中查找叫 cmd 的一个可执行文件。在 Windows 平台上,查找被展开为相同的目录和与 exec 使用相同的文件名扩展。 Auto_exec 在一个叫 auto_execs 的数组中记住以前查找的信息;这避免在将来调用相同的 cmd 时进行路径查找。可以使用命令 auto_reset 来强迫 auto_execok 忘掉缓存的信息。
namespace import 期间调用 Auto_import 来查看用 pattern 指定的导入命令是否驻留在一个 自动装载的库中。如果是,则装载这个命令,这样要建立导入连接的解释器就可以获得它们。如果这个命令不驻留在自动装载库中,auto_import 什么都不做。
这个命令尝试装载一个叫做 cmd 的 Tcl 命令的定义,它查找一个自动装载路径,它是一个或多个目录的一个列表。如果全局变量 $auto_path 存在的话,则它给出这个自动装载路径。如果没有 $auto_path 变量,则若 TCLLIBPATH 环境变量存在则使用它。否则自动装载路径只包含 Tcl 库目录。在自动装载路径中的每个目录中必须有描述在这个目录中定义的一个或多个命令的一个文件 tclIndex,和要被求值来装载每个命令的一个脚本。应当使用 auto_mkindex 命令来自动生成 tclIndex 文件。如果在一个索引文件中找到 cmd ,则求值适当的脚本来建立这个命令。如果成功的建立了 cmd,则 auto_load 命令返回 1。如果没有给 cmd 的索引条目或这个脚本实际上定义的不是 cmd(例如,因为索引信息过时了),这个命令返回 0。如果在处理这个脚本的时候发生了一个错误,则返回这个错误。Auto_load 只读这个索引文件一次并把它保存到数组 auto_index 中;以后对 auto_load 的调用将在这个数组中检查 cmd 而不是重读索引文件。可以用命令 auto_reset 删除缓存的索引信息。这将强制下一个 auto_load 命令从磁盘重新装载索引数据库。
生成适合于 auto_load 使用的一个索引。这个命令在 dir 中查找名字匹配任何 pattern 参数的所有文件(使用 glob 命令进行匹配),生成在所有匹配的文件的中定义的所有 Tcl 命令过程的一个索引,并且在 dir 中的一个叫 tclIndex 的文件中存储索引信息。如果未给出模式,则假定模式是 *.tcl,例如
auto_mkindex foo *.tcl

将在子目录读 foo 中读取所有 .tcl 文件并生成一个新索引文件 foo/tclIndex

Auto_mkindex 通过把 Tcl 脚本载入(source)到一个从解释器中来分析它们并监视执行的 proc 和 namespace 命令。扩展可以使用(没有文档) auto_mkindex_parser 包来注册对 auto_load 索引有所贡献的其他命令。你必须阅读 auto.tcl 来查看这是如何工作的。

Auto_mkindex_old 在一个相对不复杂的方式分析 Tcl 脚本: 如果任何一行包含字 proc 为它的第一个字,则假定它为一个过程定义并接受这一行的下一个字为这个过程的名字。不是以这种方式出现的过程定义(比如,在 proc 前面有空格)将不被编排索引。如果你的脚本包含“危险”代码,比如全局初始化代码或有特殊字符如 $*[] 的过程名字,则你使用 auto_mkindex_old 是更安全的。

销毁被 auto_execokauto_load 缓存的所有信息。下次需要这些信息的时候将从磁盘重新读取。Auto_reset 还删除在 auto-load 中列出的所有过程,这样下次使用它们的时候将装载它们的刷新了的复本。
计算 command 的完全限定的名字的一个列表。这个列表镜像标准 Tcl 解释器用以查找命令的那个路径: 首先它在当前名字空间中查找这个命令,接着在全局名字空间中。相应的,如果 command 是相对的并且 namespace 不是 ::,则返回的这个列表两个元素: 一个是由 namespace 界定范围的command,如同它是一个在 namespace 名字空间中的命令一样;而另一个 command 如同在全局名字空间中的一个命令一样。否则,如果 command 是绝对的(它以 :: 为开始),或者 namespace::,则这个列表只包含一个 command ,如同它是一个在全局名字空间中的命令一样。

在 Tcl 中自动装载设施使用 Auto_qualify,用来生成自动装载索引如 pkgIndex.tcl,和用来在运行时进行实际的函数自动装载。

这个命令是扩展在它们的初始化期间使用的一个标准查找过程。扩展调用这个过程来在多个标准路径中查找它们的过程。目录名字的最后的构成部分通常是 basenameversion (例如,tk8.0),但在建造等级上他可能是“库”。一旦找到就把 initScript 文件 source(加载)到解释器中。把在其中找到文件的那个目录保存到全局变量 varName 中。如果已经定义这个变量(比如,在应用初始化期间用 C 代码),则不进行查找。否则在以下这些目录中进行查找: 由环境变量 enVarName 给出名字的目录;相对于 Tcl 库的目录;相对于(??? relative to)在标准安装 bin 或 bin/arch 中的可执行文件的目录;相对于在当前建造树中的可执行文件的目录;相对于在并行建造树中的可执行文件的目录。
把数组 arrayName 中的所有元素的名字和值输出到标准输出上。ArrayName 必须是一个对于 parray 的调用者是可以访问的一个数组。它可以是局部的或全局的。
返回字符串 str 中在起始索引 start 之后出现的第一个字结束(end-of-word)位置的的索引。定义字结束位置为在起始点之后跟随在第一个单字字符后面的第一个非字字符。如果在起始点之后没有字结束位置则返回 -1。关于 Tcl 如何确定哪个字符是单字字符的详情参见下面对 tcl_wordcharstcl_nonwordchars 的描述。
返回字符串 str 中在起始索引 start 之后出现的第一个字开始(start-of-word)位置的的索引。定义字开始位置为跟随在一个非字字符后面的第一个单字字符。如果在起始点之后没有字开始位置则返回 -1。
返回字符串 str 中在起始索引 start 之前出现的第一个字开始(start-of-word)位置的的索引。如果在起始点之前没有字开始位置则返回 -1。
返回字符串 str 中在起始索引 start 之后出现的第一个字边界的索引。如果在给定字符串中在起始点之后没有边界则返回 -1。返回的索引参照组成一个边界(字符)对的第二个字符。
返回字符串 str 中在起始索引 start 之前出现的第一个字边界的索引。如果在给定字符串中在起始点之前没有边界则返回 -1。返回的索引参照组成一个边界(字符)对的第二个字符。

变量 VARIABLES

在 Tcl 库中的过程定义或使用下列全局变量:

用它来记录关于特定命令是否存在为可执行文件的信息。
auto_load 用它来保存从磁盘读来的索引信息。
如果设置了任何值,则 unknown 不尝试自动执行任何命令。
如果设置了任何值,则 unknown 不尝试自动装载任何命令。
如果设置了它,则它必须包含一个有效的 Tcl 列表,给出在自动装载操作中要查找的目录。在启动期间初始化这个变量为依次包含: 在 TCLLIBPATH 环境变量中列出的目录,由 $tcl_library 变量命名的目录,$tcl_library 的父目录,在 $tcl_pkgPath 变量中列出的目录。
如果设置了它,则它指定包含库脚本的目录的位置(这个变量的值将被赋予 tcl_library 变量并被 info library 命令所返回)。如果这个变量未被设置,则使用缺省的值。
如果设置了它,则它必须包含一个有效的 Tcl 列表,给出在自动装载操作期间要查找的目录。必须用 Tcl 格式指定目录,使用“/”作为分隔符而不管是在什么平台上。只在初始化 auto_path 的时候使用这个变量。
这个变量包含一个正则表达式,用于象 tcl_endOfWord 这样的例程来识别一个字符是否是一个字的一部分。如果这个模式匹配一个字符,则把这个字符作为一个非字(non-word)字符对待。在 Windows 平台上,空格、tab、和换行被作为非字字符对待。在 Unix 下,除了数字、字母和下划线之外,所有字符都是非字字符。
这个变量包含一个正则表达式,用于象 tcl_endOfWord 这样的例程来识别一个字符是否是一个字的一部分。如果这个模式匹配一个字符,则把这个字符作为一个单字字符对待。在 Windows 平台上,字有任何不是空格、tab、或换行的字符组成。在 Unix 下,字由数字、字母或下划线组成。
unknown 用它来记录正在查找的命令。在 unknown 在自身上无穷递归的地方,使用它来检测错误。在 unknown 返回前删除它的值。

参见 SEE ALSO

info(n), re_syntax(n)

关键字 KEYWORDS

auto-exec, auto-load, library, unknown, word, whitespace

寒蝉退士

2001/12/06

《中国 Linux 论坛 man 手册页翻译计划》:

http://cmpp.linuxforum.net

本页面中文版由中文 man 手册页计划提供。
中文 man 手册页计划:https://github.com/man-pages-zh/manpages-zh

8.0 Tcl