我试图在tcl的其他进程中使用全局变量。
下面是一个简短的例子:
proc myname {} {
set ::name [gets stdin]
}
proc myname2 {} {
puts "your name is: $name"
}
tcl_shell> proc myname
Jhon <--- "Jhon" should be stored in varible called *name*
tcl_shell> proc myname2
your name is Jhon <-- I want something like this.
但是我仍然看到这个错误:error: cannot read "name": no such variable
我也试过这个:
proc myname {} {
global name
set name [gets stdin]
}
proc myname2 {} {
puts "your name is: $name"
}
您正在尝试读取myname2
范围内的变量name
:
proc myname2 {} {
puts "your name is: $name"
}
当然,在myname2
函数中没有变量name
。您保存到的变量是全局(::
)作用域,因此您可以这样做:
proc myname2 {} {
global name
puts "your name is: $name"
}
或
proc myname2 {} {
puts "your name is: $::name"
}
与C/c++不同,tcl默认隐藏全局作用域。你需要有意识地从全局作用域导入变量到你的函数中。