______________________________________________________________________________
NAME
uplevel - 在 一 个 不 同 的 栈 桢 中 执 行 一 个 脚 本
总 览 SYNOPSIS
uplevel ?level? arg ?arg ...? _________________________________________________________________
描 述 DESCRIPTION
串 联 所 有 arg 参 数 如 同 把 它 们 传 递 给 concat 一 样 ; 接 着 在 用 level 指 示 出 的 变 量 上 下 文 中 对 结 果 进 行 求 值 。 Uplevel 返 回 这 次 求 值 的 结 果 。 如 果 level 是 一 个 整 数 则 它 给 出 执 行 这 个 命 令 之 前 要 移 动 的 距 离 (在 过 程 调 用 栈 上 )。 如 果 level 由 # 和 随 后 的 一 个 数 字 组 成 , 则 这 个 数 字 给 出 一 个 绝 对 的 层 次 数 。 如 果 省 略 了 level 则 它 缺 省 为 1。 如 果 第 一 个 command 参 数 以 一 个 数 字 或 # 则 不 能 缺 省 Level。 例 如 , 假 设 从 顶 层 调 用 过 程 a, 而 它 调 用 b, 接 着 b 调 用 c。 假 设 c 调 用 了 uplevel 命 令 。 如 果 level 是 1 或 #2 或 被 省 略 了 , 则 命 令 将 在 b 的 变 量 上 下 文 中 在 执 行 。 如 果 level 是 2 或 #1 则 命 令 将 在 a 的 变 量 上 下 文 中 执 行 。 如 果 level 是 3 或 #0 则 命 令 将 在 顶 层 执 行 (只 有 全 局 变 量 是 可 见 的 )。
uplevel 命 令 导 致 调 用 它 的 过 程 在 命 令 执 行 的 时 候 从 过 程 调 用 栈 中 消 失 。 在 上 面 的 例 子 中 , 假 设 c 调 用 了 命 令
uplevel 1 {set x 43; d}
这 里 的d 是 另
一 个 Tcl 过 程 。 set
命 令 将 修 改 在
b 的 上 下 文 中
的 变 量 x , 而
d 将 在 层 次 3 上
执 行 , 如 同 从
b 调 用 它 一 样
。 如 果 d 接 着
执 行 命 令
uplevel {set x 42} 则set 命 令
将 修 改 在 b 的
上 下 文 中 的 同
一 个 变 量 x: 在
d 执 行 的 时 候
过 程 c 在 调 用
栈 上 不 出 现 。
可 以 使 用 命 令
“info level”来 获 得
当 前 过 程 的 层
次 。
Uplevel 使 实 现 如 同 Tcl 过 程 的 新 控 制 结 构 成 为 可 能 (例 如 , 可 以 使 用 uplevel 把 while 构 造 实 现 为 一 个 Tcl 过 程 )。
namespace eval 是 改 变 Tcl 命 令 上 下 文 的 另 一 种 方 式 (除 了 过 程 调 用 之 外 )。 它 向 栈 增 加 一 个 调 用 桢 来 表 示 名 字 空 间 上 下 文 。 这 意 味 着 每 个 namespace eval 命 令 被 视 为 给 uplevel 和 upvar 命 令 的 另 一 个 调 用 层 次 。 例 如 , info level 1 将 返 回 描 述 一 个 命 令 的 列 表 , 它 要 么 是 最 外 的 过 程 要 么 是 最 外 的 namespace eval 命 令 。 还 有 , uplevel #0 在 最 外 面 的 名 字 空 间 (全 局 名 字 空 间 )中 的 顶 层 求 值 一 个 脚 本 。
参 见 SEE ALSO
关 键 字 KEYWORDS
context, level, namespace, stack frame, variables
[中 文 版 维 护 人 ]
寒 蝉 退 士
[中 文 版 最 新 更 新 ]
2001/11/21
《 中 国 Linux 论 坛 man 手 册 页 翻 译 计 划 》 :
跋
本 页 面 中 文 版 由 中 文 man 手 册 页 计 划 提 供 。 中 文 man 手 册 页 计 划 : https://github.com/man-pages-zh/manpages-zh