gpt4 book ai didi

variables - 如何访问过程之外的变量

转载 作者:行者123 更新时间:2023-12-02 03:22:09 25 4
gpt4 key购买 nike

我试图理解 Tcl 变量作用域,但我坚持认为是一个简单的概念:如何访问我在过程之外定义的变量,但我没有显式传递给过程?

我试图避免设置一堆全局变量,并且只访问我在特定命名空间中定义的变量。我需要在下面的代码中添加什么,以便 proc 可以访问变量 a,这显然不在 proc 的范围内?

set a apples
proc myList {b c} {
puts [concat $a $b $c]
}

最佳答案

您可以使用upvar :

set a apples
proc myList {b c} {
upvar a a
puts [concat $a $b $c]
}

或者,稍微扩展示例以显示“源”变量不必存在于全局范围内:

proc p1 {} { set a 10; p2 }
proc p2 {} { upvar 1 a b; puts "in p2, value is $b" }
p1

输出

in p2, value is 10

如果 a 是在命名空间中定义的,则可以使用 variable :

namespace eval foo {
set a apples
# OR
# variable a apples
}

proc foo::myList {b c} {
variable a
puts [concat $a $b $c]
}

或者,如果 a 是在全局范围内创建的,您仍然可以在没有 global 函数的情况下使用 :: 访问它(I'对此,请引用 this SO question):

proc myList {b c} {
puts [concat $::a $b $c]
}

关于variables - 如何访问过程之外的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54447476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com