Я устанавливаю макросы, Set и Say.Определено в процедурах.
proc Set {key value args} {
set ::$key $value
set "::key2" "$key"
}
proc Say {key} {
puts $key
}
proc Say2 {key} {
set key3 [regsub "\%" $key "\$"]
puts $key3
eval puts $key3
}
Что позволяет мне выполнить следующее:
Set "test" "this should display this test text"
Say $key2 ;#should display the key "test" which is what we just set
Say $test ;#presents the value of the key test
Вывод
% Set "test" "this should display this test text"
test
% Say $key2 ;#should display the key "test" which is what we just set
test
% Say $test ;#presents the value of the key test
this should display this test text
Итак, теперь давайте скажемЯ хочу переназначить переменную $ на%
Set "mouse" "squeak" ;#set key mouse with value string of "squeak"
Say $mouse ;#displays the value as set above correctly
Say2 %mouse ;#start using our own characters to represent variables - switch the % for a $ and then output
Однако я получаю при использовании eval
can't read "mouse": no such variable
Выход
% Set "mouse" "squeak" ;#set key mouse with value string of "squeak"
mouse
% Say $mouse ;#displays the value as set above correctly
squeak
% Say2 %mouse ;#start using our own characters to represent variables
$mouse
can't read "mouse": no such variable
Я нахожу это странным, потому что мы установили его выше, мы можем вспомнить значение, используя стандартный $, и я могу доказать, что regsub в Say2 работает так, как должно, заменяя% на $.
% mouse становится$ mouse, которая является допустимой переменной.Eval $ mouse output без такой переменной
Я что-то упустил?
Спасибо