Tcl 如何将其他命名空间中的变量设置为过程中的变量?
我有TCL代码:Tcl 如何将其他命名空间中的变量设置为过程中的变量?,tcl,Tcl,我有TCL代码: namespace eval gen { proc generate { } { set language "C" namespace eval current_file_generation_info { variable language $language } } } 在第variable language$language行,我试图将命名空间当前文件\u generation\u
namespace eval gen {
proc generate { } {
set language "C"
namespace eval current_file_generation_info {
variable language $language
}
}
}
在第variable language$language
行,我试图将命名空间当前文件\u generation\u info
中的变量language
设置为variablelanguage
内部过程generate
的值。我的代码给了我类似“语言变量不存在”这样的错误,我理解它为什么会这样做
因此,我的问题是,如何将命名空间当前文件\u生成\u信息中的变量language
设置为generate
过程中的变量language
namespace eval gen {
proc generate { } {
set language "C"
set [namespace current]::language $language
}
generate
variable language
puts $language
}
避免对本地变量和名称空间变量使用相同的变量名会更清楚
namespace eval gen {
proc generate { } {
variable language
set _language "C"
set language $_language
}
}
或者省略局部变量
namespace eval gen {
proc generate { } {
variable language
set language "C"
}
}
最简单的方法是在变量
调用中只命名目标名称空间,但如果这样做,则应将名称空间作为单独的步骤(如果可以在尚未创建NS时调用代码)
否则,您可以执行以下操作:
namespace eval gen {
proc generate { } {
namespace eval current_file_generation_info \
[list variable language "C"]
}
}
提示:list
命令非常擅长生成调用单个命令的无替换脚本。在您的示例中,language
变量是在gen
命名空间中的过程的gen
命名空间中创建的。我需要在gen
命名空间中的current\u file\u generation\u info
命名空间表单过程中创建变量language
。使用其他命名空间中的current\u file\u generation\u info::language
变量的最佳方法是什么?
namespace eval gen {
proc generate { } {
namespace eval current_file_generation_info \
[list variable language "C"]
}
}