gpt4 book ai didi

variables - tcl 中的变量作用域

转载 作者:行者123 更新时间:2023-12-04 16:52:49 25 4
gpt4 key购买 nike

我有一个关于 TCL 中变量作用域的问题,我有以下代码:

 namespace eval ::hello {
variable player
variable name
namespace export *
}


proc ::hello::setPlay {value} {
set ::hello::player
}

proc ::hello::getPlay {} {
return $::hello::player
}

proc ::hello::setName {value} {
set ::hello::name
}

proc ::hello::getName {} {
return $::hello::name
}

proc GET_NAME {} {
#here I have a variable called name as well
set name "RON"
return $name
}

在 GET_NAME 中,如果我将变量名设置为“RON”,它是否会设置在命名空间中声明的变量名?我可以在 GET_NAME 和命名空间中有相同的变量名吗?如果我添加这一行 variable name在 GET_NAME 中,这是否意味着它会设置命名空间中声明的变量?

最佳答案

过程(和 lambda 表达式)中的变量默认为该过程的本地变量。如果显式声明为其他内容(例如,使用 globalupvarvariable )那么实际上将局部变量耦合到其他地方的另一个变量,以便对一个变量进行操作(例如,读取或写入)与执行完全一样在另一。如果您使用带有 :: 的变量名其中,这是对命名空间变量的引用(全局命名空间只是 :: ),该变量可能相对于当前命名空间或全局命名空间进行解析,具体取决于名称是否以 :: 开头。或不。 (把它想象成文件名中的斜线。)

执行内部代码时 namespace eval , 始终使用 variable在使用它们之前声明变量。这避免了全局变量阴影的问题,这些问题非常可怕,但由于某些现有代码依赖于它们而必须保留。 (从技术上讲,您不需要在 namespace eval :: 中执行此操作,因为全局变量无法隐藏自身,但这不会造成伤害。)

具体处理:

in the GET_NAME,if I set the variable name as "RON", does it will set the variable name declaired in namespace?



不,不是你写的代码。

can I have the same variable name in GET_NAME and namespace?



您可以在两个地方使用相同名称的变量。这可能会令人困惑,但它限制了整体的惊喜。

And if I add this line variable name in GET_NAME, does this mean, it will set the variable declaired in name space?



是的。正是这样。 (它精确地将两者结合在一起。)

关于variables - tcl 中的变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11135070/

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