Уроки Tcl
#05: Обработка и подстановка при группировке с помощью [ ] |
Большинство задач компьютерного программирования заключается в манипуляции данными с помощью команд, и сохранении данных для того, чтобы в последующем использовать их в другой команде. В Tcl доступ к результату выполнения команды осуществляется заключением команды в квадратные скобки ([ ]).
В предыдущих уроках мы узнали, что Tcl читает строку и заменяет все $переменные их значениями.
Когда интерпретатор Tcl получает команду в квадратных скобках, он начинает её обрабатывать отдельно. Вначале производятся замены, а затем команда выполняется как будто она находится на отдельной строке без квадратных скобок. Однако, результат выполнения заменяет команду в скобках, и интерпретатор продолжает обрабатывать строку далее.
Механизм заключается в том, что интерпретатор считает строку в квадратных скобках командой. А каждая команда обрабатывается в две фазы - подстановка и выполнение. Результат же выполнения подставляется на место команды в квадратных скобках.
Обратите внимание на третью строку в примере:
set y [set x "еклмн"]
Помните, что команда set возвращает значение, которое оно присвоило переменной. В этой команде set присваивает значение "еклмн" переменной x. При выполнение строки эта команда будет выполнена и вместо квадратных скобок будет новое значение переменной x. таким образом, строка примит вид:
set y "еклмн"
Данная команда будет выполнена и значение "еклмн" присвоится переменной y.
Из этого правила есть два исключения:
Выполните пример, и посмотрите как работают скобки и кавычки.
set x "абв" puts "Простая замена: $x\n" set y [set x "еклмн"] puts "Запомните, что set возвращает новое значение переменной: X: $x Y: $y\n" set z {[set x "Эта строка в кавычках внутри квадратных скобок."]} puts "Помните о фигурных скобках: $z\n" set a "[set x {Эта строка в фигурных скобках внутри кавычек.}]" puts "В данном случае команда set выполняется: $a" puts "значение \$x : $x\n" set b "\[set y {Эта строка в фигурных скобках внутри кавычек.}]" puts "Помните, \\ обратная дробь отключает скобки:\nзначение \$b : $b" puts "значение \$y : $y" |
Горбачев "Yurez" Юрий |