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

我有TCL代码:

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
设置为variable
language
内部过程
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"]
    }
}