问题标签 [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.
perl - 如何在 Perl 的上层范围内本地化变量?
AUTOLOAD
在开发使用或其他子例程调度技术的 Perl 模块时,我曾多次遇到以下模式:
这工作正常,并caller
看到正确的范围。
现在我想做的是$_
在$self
执行&$code
. 这将是这样的:
由于性能和依赖性问题,涉及包装的解决方案caller
是不可接受的。所以这似乎排除了第二种选择。
回到第一个,在 期间防止新值$_
超出范围的唯一方法goto
是不本地化更改(不是可行的选项)或实施某种uplevel_local
or goto_with_local
。
我玩过各种涉及PadWalker
, Sub::Uplevel
,和其他的排列Scope::Upper
,B::Hooks::EndOfScope
但还没有想出一个健壮的解决方案,可以$_
在正确的时间清理,并且不换行caller
。
有没有人找到适用于这种情况的模式?
(SO 问题:How can I localize Perl variables in a different stack frame?是相关的,但保留caller
不是必需的,最终答案是使用不同的方法,因此该解决方案在这种情况下没有帮助)
python - python 2.5 是否具有与 Tcl 的 uplevel 命令等效的功能?
python 是否具有与 Tcl 的 uplevel 命令等效的功能?对于那些不知道的人,“uplevel”命令可以让你在调用者的上下文中运行代码。这是它在 python 中的样子:
然而,这不仅仅是设置变量,所以我不是在寻找仅仅改变字典的解决方案。我希望能够执行任何代码。
bash - 如何评估 tclsh 脚本?
tclsh是一个包含 TCL 命令的 shell。
TCLuplevel
命令评估给定的 TCL 脚本,但它无法评估 tclsh 脚本(可以包含 bash 命令)。
如何获得uplevel
tclsh 脚本的类似物?
考虑这个 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 可能不同的函数代码。
是否有任何解决方案可以规避这些问题?
tcl - 当 value 有多个单词时,tcl Uplevel set 命令失败
全部,我想要做什么:Proc A 调用 Proc B,使用 B 的上级命令我试图在 proc A 范围内设置变量。当值有空格时会发生错误。
如果我注释掉key2,它工作正常。添加 key2 时,失败并出现以下错误。
有关如何克服此错误的任何建议。感谢你的帮助。
namespaces - TCL 命名空间和堆栈框架有什么区别?
Upvar 在不同的堆栈帧(有时称为调用堆栈或 不同的范围)中创建指向变量的链接。
Upvar 还用于为全局(或命名空间)变量2创建别名。但是命名空间只能由namespace eval命令创建。proc 命令创建一个新的堆栈帧。
命名空间和调用堆栈似乎是TCL 命名上下文可以更改的两种方式。Upvar 和 Uplevel 可以在命名空间和调用堆栈上工作。
我做对了吗?我还没有看到调用堆栈和命名空间之间的直接比较,因此我提出了问题。
variables - Tcl中大括号内的变量替换
在我错的地方纠正我。
当我们在大括号内使用变量时,该值不会在评估期间被替换,而是简单地作为参数传递给过程/命令。(是的,有一些例外,例如expr {$x+$y}
)。
考虑以下场景,
方案 1
方案 2
在这两种情况下,我们都可以看到变量替换是在if
循环体(即{puts "value is $a"}
)上执行的,而在循环体中uplevel
,它不是(即{set val $c}
),基于当前上下文。
我可以看到它好像他们可以通过upvar
某种东西访问它。但是,为什么它必须在不同的地方不同?在幕后,为什么要这样设计?或者它只是一种传统的工作方式Tcl
?
mysql - UPLEVEL 运算符的概念是什么?
我不是数据库专家,到目前为止我只使用过 MySQL 数据库。我熟悉SELECT
, INSERT
, UPDATE
,DELETE
语句。如您所知,互联网上有很多关于它们的信息。
最近我听说了一个名为UPLEVEL
声明的东西。我不知道它的概念是什么,也找不到任何好的参考。
那么,有人知道那是什么吗?
performance - Tcl upvar 和 uplevel 的性能
假设我有一个上一级的变量,我只想查询它的值。我有两个选择:
uplevel { set var_name }
或者:
upvar var_name
如果我只需要查询一次变量,而不是更改它,哪一个应该更快?