我有TCL代码:
namespace eval gen {
proc generate { } {
set language "C"
namespace eval current_file_generation_info {
variable language $language
}
}
}
在第variable language $language
行我尝试将名称空间language
中的变量current_file_generation_info
设置为过程language
内的变量generate
的值。我的代码给了我一些错误,比如“语言变量不存在”,我明白为什么会这样做。
所以我的问题是,如何在language
过程中将命名空间current_file_generation_info
中的变量language
设置为等于变量generate
?
答案 0 :(得分:1)
namespace eval gen {
proc generate { } {
set language "C"
set [namespace current]::language $language
}
generate
variable language
puts $language
}
避免对本地var和命名空间var
使用相同的变量名更为清楚namespace eval gen {
proc generate { } {
variable language
set _language "C"
set language $_language
}
}
或者只是省略本地var
namespace eval gen {
proc generate { } {
variable language
set language "C"
}
}
答案 1 :(得分:1)
最简单的方法是在variable
调用中命名目标命名空间,但是如果这样做,则应该将命名空间作为单独的步骤(如果可以在某个时刻调用代码) NS尚未创建。)
namespace eval gen {
proc generate { } {
# Make the namespace by running an empty script in it
namespace eval current_file_generation_info {}
# Initialise the variable
variable current_file_generation_info::language "C"
}
}
否则,您可以这样做:
namespace eval gen {
proc generate { } {
namespace eval current_file_generation_info \
[list variable language "C"]
}
}
提示:list
命令非常擅长生成调用单个命令的无替换脚本。