У Tcl есть два уровня синтаксис, что он строго относится ко всему. Первый уровень является общий синтаксис Tcl, который принимает:
lappend $var1 $var2
и разбирает его к трем словам: lappend
, слова, полученные путем считывания переменной var1
, и слово, полученное путем считывания переменной var2
.
Затем Tcl отправляет команду, названную первым словом (lappend
, встроенный Tcl), который применяет обработку синтаксиса команд. В случае lappend
это довольно просто: первый аргумент называет переменную, а второй и последующие аргументы - это слова для добавления в список в названной переменной.
В вашем случае первый аргумент, который называет переменную, получается путем чтения другой переменной (var1
), а значение для добавления в список происходит из переменной (var2
); такое имя, как a b c d e
, является именем юридической переменной в Tcl, но это действительно неудобно использовать. И шанс очень высокий, что вы не хотите писать, что: размещение имен переменных в переменной обычно является индикатором запутанного кода. Вы можете сделать это, но вы вряд ли когда-либо захотите это сделать (за исключением случаев, когда вы используете имя переменной с upvar
). Вы, вероятно, на самом деле имел в виду, чтобы написать:
lappend var1 $var2
Tcl является очень точным о различии между именами переменных и переменным содержанием. $
не является декоративным! Здесь можно сказать «прочитайте эту переменную прямо сейчас», а $var1
практически эквивалентен [set var1]
в семантических терминах. (The $
сокращенная позже, функция Tcl 2.0 путь обратно в тот же день!)
Tcl также не допускает двойного разыменования с $$vrbl
. В редких случаях вам это нужно, вы делаете [set $vrbl]
. И если вы это сделаете, вы, вероятно, должны сразу увидеть, можете ли вы использовать массив, поскольку это, как правило, лучший выбор ...
Пожалуйста, отформатируйте свой вывод кода так, чтобы он отображался как код. Я думаю, вам нужно добавить отступ в каждую строку (см. Подсказки редактора). – Brandin
Подобная основная причина проблемы [здесь] (http://stackoverflow.com/q/17559577/1578604) – Jerry