Manpages

______________________________________________________________________________

NAME

uplevel - 在 一 个 不 同 的 栈 桢 中 执 行 一 个 脚 本

总 览 SYNOPSIS

uplevel ?level? arg ?arg ...? _________________________________________________________________

描 述 DESCRIPTION

串 联 所 有 arg 参 数 如 同 把 它 们 传 递 给 concat 一 样 ; 接 着 在 用 level 指 示 出 的 变 量 上 下 文 中 对 结 果 进 行 求 值 。 Uplevel 返 回 这 次 求 值 的 结 果 。 如 果 level 是 一 个 整 数 则 它 给 出 执 行 这 个 命 令 之 前 要 移 动 的 距 离 (在 过 程 调 用 栈 上 )。 如 果 level# 和 随 后 的 一 个 数 字 组 成 , 则 这 个 数 字 给 出 一 个 绝 对 的 层 次 数 。 如 果 省 略 了 level 则 它 缺 省 为 1。 如 果 第 一 个 command 参 数 以 一 个 数 字 或 # 则 不 能 缺 省 Level。 例 如 , 假 设 从 顶 层 调 用 过 程 a, 而 它 调 用 b, 接 着 b 调 用 c。 假 设 c 调 用 了 uplevel 命 令 。 如 果 level1#2 或 被 省 略 了 , 则 命 令 将 在 b 的 变 量 上 下 文 中 在 执 行 。 如 果 level2#1 则 命 令 将 在 a 的 变 量 上 下 文 中 执 行 。 如 果 level3#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 过 程 的 新 控 制 结 构 成 为 可 能 (例 如 , 可 以 使 用 uplevelwhile 构 造 实 现 为 一 个 Tcl 过 程 )。

namespace eval 是 改 变 Tcl 命 令 上 下 文 的 另 一 种 方 式 (除 了 过 程 调 用 之 外 )。 它 向 栈 增 加 一 个 调 用 桢 来 表 示 名 字 空 间 上 下 文 。 这 意 味 着 每 个 namespace eval 命 令 被 视 为 给 uplevelupvar 命 令 的 另 一 个 调 用 层 次 。 例 如 , info level 1 将 返 回 描 述 一 个 命 令 的 列 表 , 它 要 么 是 最 外 的 过 程 要 么 是 最 外 的 namespace eval 命 令 。 还 有 , uplevel #0 在 最 外 面 的 名 字 空 间 (全 局 名 字 空 间 )中 的 顶 层 求 值 一 个 脚 本 。

参 见 SEE ALSO

namespace(n), upvar(n)

关 键 字 KEYWORDS

context, level, namespace, stack frame, variables

[中 文 版 维 护 人 ]

寒 蝉 退 士

[中 文 版 最 新 更 新 ]

2001/11/21

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

http://cmpp.linuxforum.net

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