Ошибка: не могу прочитать "n": нет такой переменной в tcl

proc rep {name} {
    upvar $name n 
    puts "nm is $n"
}

В вышеописанной процедуреname'это параметр, который передается в процедуру с именем'rep". Когда я запускаю эту программу, я получил "error : Can't read "n" : no such variableMsgstr "Может ли кто-нибудь сказать мне, что может быть причиной этой ошибки.

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

Надеюсь, поможет.

Другие вопросы по тегам