Хорошо, у вас две разные проблемы. Во-первых, пространство имен еще не существует; во-вторых, вам нужно написать код, чтобы переменная создавалась / записывалась в это пространство имен. В целом, для этого требуется лишь небольшая модификация кода Хая:
proc foo {param} {
# Create the namespace if it doesn't already exist
namespace eval ::foo_ns {}
# Set the variable in the namespace
set ::foo_ns::x $param
}
В качестве комментария к некоторым проблемам, которые у вас были:
proc foo {param} {
namespace eval foo_ns {
uplevel {set foo_ns::x $param }
}
}
Это не работает, потому что вы, по сути, говорите следующее:
в пространстве имен "foo_ns" запустите следующий код:
на верхнем уровне стека запустите следующий код:
"set foo :: x $ param"
Однако на верхнем уровне стека переменная «param» не имеет значения (она определена только в процедуре. Вам нужно заранее убедиться, что она заменена. Я бы включил код, который будет работать, но Честно говоря, я боюсь, что это приведет к путанице с фактическим ответом на вопрос ... так что я его опущу.