Ошибка: не могу прочитать "n": нет такой переменной в tcl
proc rep {name} {
upvar $name n
puts "nm is $n"
}
В вышеописанной процедуреname
'это параметр, который передается в процедуру с именем'rep
". Когда я запускаю эту программу, я получил "error : Can't read "n" : no such variable
Msgstr "Может ли кто-нибудь сказать мне, что может быть причиной этой ошибки.
2 ответа
Это сообщение об ошибке будет создано, если переменная, имя которой вы передали rep
не существует в области вызова. Например, проверьте этот интерактивный сеанс с tclsh…
% proc rep {name} { upvar $ name n ставит "нм равно $n" } % rep foo не могу прочитать "n": нет такой переменной % set foo x Икс % rep foo нм х
Идти глубже...
Переменная foo
в смешном состоянии после upvar
если это не установлено; он на самом деле существует (на него ссылаются в хэш-таблице переменных глобального пространства имен), но не имеет содержимого, поэтому проверка его существования не удалась. (Говорят, что переменная существует, когда у нее есть запись где-то, то есть в каком-то хранилище, в которое она помещает свое содержимое, и у нее есть значение, установленное в этом хранилище; неустановленная переменная может быть той, которая имеет NULL
на уровне C в этом хранилище. Сам язык Tcl не поддерживает NULL
ценности вообще по этой причине; они соответствуют небытию.)
Я столкнулся с этим тоже. Я понял, что посылаю $foo вместо foo (обратите внимание, без знака доллара).
% set foo 1
%
% rep $foo
can't read "foo": no such variable
%
% rep foo
nm is 1
Надеюсь, поможет.