Reputation: 6930
I have TCL code:
namespace eval gen {
proc generate { } {
set language "C"
namespace eval current_file_generation_info {
variable language $language
}
}
}
At line variable language $language
I am trying to set variable language
in namespace current_file_generation_info
to the value of variable language
inside procedure generate
. My code gives me error something like "language variable does not exists" and I understand why it does so.
So my question is, how can I set the variable language
in namespace current_file_generation_info
equal to variable language
inside generate
procedure?
Upvotes: 0
Views: 100
Reputation: 137557
The simplest way is to just name the target namespace in the variable
call, but if you do that, you should make the namespace as a separate step (if it is possible to call the code at a point when the NS wasn't already created).
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"
}
}
Otherwise, you could do:
namespace eval gen {
proc generate { } {
namespace eval current_file_generation_info \
[list variable language "C"]
}
}
Hint: the list
command is very good at generating substitution-free scripts that call a single command.
Upvotes: 1
Reputation: 246744
namespace eval gen {
proc generate { } {
set language "C"
set [namespace current]::language $language
}
generate
variable language
puts $language
}
It would be clearer to avoid using the same variable name for a local var and a namespace var
namespace eval gen {
proc generate { } {
variable language
set _language "C"
set language $_language
}
}
or just omit the local var
namespace eval gen {
proc generate { } {
variable language
set language "C"
}
}
Upvotes: 1