问题标签 [uplevel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
512 浏览

perl - 如何在 Perl 的上层范围内本地化变量?

AUTOLOAD在开发使用或其他子例程调度技术的 Perl 模块时,我曾多次遇到以下模式:

这工作正常,并caller看到正确的范围。

现在我想做的是$_$self执行&$code. 这将是这样的:

由于性能和依赖性问题,涉及包装的解决方案caller是不可接受的。所以这似乎排除了第二种选择。

回到第一个,在 期间防止新值$_超出范围的唯一方法goto是不本地化更改(不是可行的选项)或实施某种uplevel_localor goto_with_local

我玩过各种涉及PadWalker, Sub::Uplevel,和其他的排列Scope::UpperB::Hooks::EndOfScope但还没有想出一个健壮的解决方案,可以$_在正确的时间清理,并且不换行caller

有没有人找到适用于这种情况的模式?

(SO 问题:How can I localize Perl variables in a different stack frame?是相关的,但保留caller不是必需的,最终答案是使用不同的方法,因此该解决方案在这种情况下没有帮助)

0 投票
2 回答
1235 浏览

python - python 2.5 是否具有与 Tcl 的 uplevel 命令等效的功能?

python 是否具有与 Tcl 的 uplevel 命令等效的功能?对于那些不知道的人,“uplevel”命令可以让你在调用者的上下文中运行代码。这是它在 python 中的样子:

然而,这不仅仅是设置变量,所以我不是在寻找仅仅改变字典的解决方案。我希望能够执行任何代码。

0 投票
4 回答
1317 浏览

bash - 如何评估 tclsh 脚本?

tclsh是一个包含 TCL 命令的 shell。

TCLuplevel命令评估给定的 TCL 脚本,但它无法评估 tclsh 脚本(可以包含 bash 命令)。

如何获得upleveltclsh 脚本的类似物?


考虑这个 TCL 脚本:

这是一种 TCL shell,所以当你键入tclsh main.tcl它时会显示一个提示MyShell >,它就像你在交互式 tclsh会话中一样。但是,您处于非交互式 tclsh会话中,并且您键入的所有内容都由uplevel命令评估。所以在这里你不能像在交互式tclsh 会话中那样使用 bash 命令。例如,您不能vim直接从外壳打开,也exec vim无法正常工作。

我想要的是使MyShell >行为像交互式tclsh会话。我不能只使用的原因tclsh是最后一行的循环main.tcl:我必须有那个循环,一切都必须在那个循环中发生。我还必须在该循环的每次迭代中做一些事情,所以可以使用vwait.


这是解决方案。 我没有找到更好的解决方案来覆盖该::unknown功能。

这个想法是修改::unknown函数,以便它处理MyShell评估作为tclsh交互式会话的评估。

这是一个丑陋的解决方案,因为我正在修复::unknown对于不同系统和不同版本的 tcl 可能不同的函数代码。

是否有任何解决方案可以规避这些问题?

0 投票
1 回答
218 浏览

tcl - 当 value 有多个单词时,tcl Uplevel set 命令失败

全部,我想要做什么:Proc A 调用 Proc B,使用 B 的上级命令我试图在 proc A 范围内设置变量。当值有空格时会发生错误。

如果我注释掉key2,它工作正常。添加 key2 时,失败并出现以下错误。

有关如何克服此错误的任何建议。感谢你的帮助。

0 投票
1 回答
580 浏览

namespaces - TCL 命名空间和堆栈框架有什么区别?

Upvar 在不同的堆栈帧(有时称为调用堆栈不同的范围)中创建指向变量的链接。

Upvar 还用于为全局(或命名空间)变量2创建别名。但是命名空间只能由namespace eval命令创建。proc 命令创建一个新的堆栈帧。

命名空间和调用堆栈似乎是TCL 命名上下文可以更改的两种方式。Upvar 和 Uplevel 可以在命名空间和调用堆栈上工作。

我做对了吗?我还没有看到调用堆栈和命名空间之间的直接比较,因此我提出了问题。

0 投票
2 回答
1109 浏览

variables - Tcl中大括号内的变量替换

在我错的地方纠正我。

当我们在大括号内使用变量时,该值不会在评估期间被替换,而是简单地作为参数传递给过程/命令。(是的,有一些例外,例如expr {$x+$y})。

考虑以下场景,

方案 1

方案 2

在这两种情况下,我们都可以看到变量替换是在if循环体(即{puts "value is $a"})上执行的,而在循环体中uplevel,它不是(即{set val $c}),基于当前上下文。

我可以看到它好像他们可以通过upvar某种东西访问它。但是,为什么它必须在不同的地方不同?在幕后,为什么要这样设计?或者它只是一种传统的工作方式Tcl

0 投票
0 回答
31 浏览

mysql - UPLEVEL 运算符的概念是什么?

我不是数据库专家,到目前为止我只使用过 MySQL 数据库。我熟悉SELECT, INSERT, UPDATE,DELETE语句。如您所知,互联网上有很多关于它们的信息。

最近我听说了一个名为UPLEVEL声明的东西。我不知道它的概念是什么,也找不到任何好的参考。

那么,有人知道那是什么吗?

0 投票
2 回答
86 浏览

performance - Tcl upvar 和 uplevel 的性能

假设我有一个上一级的变量,我只想查询它的值。我有两个选择:
uplevel { set var_name }
或者:
upvar var_name
如果我只需要查询一次变量,而不是更改它,哪一个应该更快?