如何升级参数名称(name2)?

how to uplevel argument name(name2)?

我想升级参数名称 kuku(pupu)。 我尝试使用下面的方法,但是 none of sthem 成功了。

global kuku(pupu) uplevel kuku(pupu) upvar kuku(pupu)

我怎样才能调高 var?

您应该能够使用 global 或 uplevel 从 proc 内部创建变量。特别是对于全局,如果是数组就不能传递变量名,只能传递数组名,如果上层命名空间是全局的:

proc foo {} {
    global kuku
    set kuku(pupu) "some value"

    # anything else to do
    return
}

foo
puts $kuku(pupu)

您可以像这样使用 uplevel 有点不同:

proc foo {} {
    set kuku(pupu) "some value"
    uplevel [list set kuku(pupu) $kuku(pupu)]

    # anything else to do
    return
}

foo
puts $kuku(pupu)

使用 upvar 会有点不同:

proc foo {arrayName} {
    upvar $arrayName newName
    set newName(pupu) "some value"

    # anything else to do
    return
}

foo kuku
puts $kuku(pupu)

海事组织:

  • 使用 global 是最简单的,但您需要记住它仅适用于数组名称,对于数组
  • 对于 uplevel,你必须考虑应该在上层命名空间中执行什么(在这种情况下,我希望 set kuku(pupu) "some value" 在上层命名空间中执行)并且可能有点困难把握可能。
  • upvar 从上层命名空间中的变量创建别名,并使其可在本地访问。别名可以具有相同的名称,如果您使用与原始名称不同的名称,则不会那么混乱。有点类似于global,它只对数组名起作用。