Reference 在TCL中计算变量的最快方法

Reference 在TCL中计算变量的最快方法,reference,tcl,expect,evaluation,Reference,Tcl,Expect,Evaluation,我将变量myref设置为: 将$expect_(缓冲区)取出到myval中的最快方法是什么 我想这会奏效的 set myval [subst $$myref] 首先替换$myref,然后用第二个值替换该值$ 这是一个例子,我认为这是你想要的: set a 12 12 set b a a set c [subst $$b] 12 我想这会奏效的 set myval [subst $$myref] 首先替换$myref,然后用第二个值替换该值$ 这是一个例子,我认为这是你想要的: set a

我将变量myref设置为:

将$expect_(缓冲区)取出到myval中的最快方法是什么


我想这会奏效的

set myval [subst $$myref]
首先替换$myref,然后用第二个值替换该值$

这是一个例子,我认为这是你想要的:

set a 12
12
set b a
a
set c [subst $$b]
12

我想这会奏效的

set myval [subst $$myref]
首先替换$myref,然后用第二个值替换该值$

这是一个例子,我认为这是你想要的:

set a 12
12
set b a
a
set c [subst $$b]
12

不能使用
$$
双重取消引用。但是,您可以仅使用单个参数的命令从变量中读取值。因此:

set myval [set $myref]
set
语句的求值首先展开
$myref
以获取
$expect\u out(buffer)
字符串,然后这是
set
命令本身的参数,并求值以返回该变量名的值

% set a(test) hello
hello
% set name "a(test)"
a(test)
% set b [set $name]
hello

不能使用
$$
双重取消引用。但是,您可以仅使用单个参数的命令从变量中读取值。因此:

set myval [set $myref]
set
语句的求值首先展开
$myref
以获取
$expect\u out(buffer)
字符串,然后这是
set
命令本身的参数,并求值以返回该变量名的值

% set a(test) hello
hello
% set name "a(test)"
a(test)
% set b [set $name]
hello

如果字符串中只包含变量名称,最好只使用一个参数来设置
set

set myref {expect_out(buffer)}
puts "The value is [set $myref]"
但是如果你也有
$
,正确的做法是使用
subst
(意思是“假装这是双引号中的东西”):


根据您所拥有的选择正确的变量。

如果您有一个字符串,其中只包含变量名称,最好只使用一个参数来设置:

set myref {expect_out(buffer)}
puts "The value is [set $myref]"
但是如果你也有
$
,正确的做法是使用
subst
(意思是“假装这是双引号中的东西”):


请详细说明,您所说的“将$expect_(缓冲区)存入myval的最快方法是什么?”我刚刚得到了正确的答案。谢谢你的参与,科德里克!请详细说明,您所说的“将$expect_(缓冲区)取出到myval中的最快方法是什么?”是什么意思?我刚刚得到了正确的答案。谢谢你的参与,科德里克!明亮的然而,我假设这在myref设置为{expect\u out(buffer)}而不是{$expect\u out(buffer)}时起作用!不过,这对我来说不是什么大问题!谢谢明亮的然而,我假设这在myref设置为{expect\u out(buffer)}而不是{$expect\u out(buffer)}时起作用!不过,这对我来说不是什么大问题!谢谢!$$在Perl和Makefile中效果很好,但在TCL中效果不佳:(代码确实有效,但是使用
subst
通常被认为是过度使用,并且有一些理由。如果要为此目的使用
subst
,则应使用选项限制命令执行的替换类型,以避免细微错误。您的解决方案基本上与t中的解决方案相同,并且与t中的解决方案一样正确他回答patthoyts提供的问题,只是使用了不同的公式。您的公式看起来更优雅,但事实上,也许令人惊讶的是,被认为不那么优雅。尽管如此,仍然很好。$$在Perl和Makefile中工作得很好,但在TCL中却不行:(代码确实有效,但是使用
subst
通常被认为是过度使用,并且有一些理由。如果要为此目的使用
subst
,则应使用选项限制命令执行的替换类型,以避免细微错误。您的解决方案基本上与t中的解决方案相同,并且与t中的解决方案一样正确他回答帕托伊斯提供的答案,只是用了一个不同的公式。你的公式看起来更优雅,但事实上,也许令人惊讶的是,被认为不那么优雅。但仍然很好。没有更好的答案了。没有更好的答案了。