TCL не может использовать подстановку переменных внутри фигурных скобок - PullRequest
1 голос
/ 24 апреля 2020

У меня проблема с тем, что переменные интерпретируются как строка, а не как предполагаемое значение.

Я пытаюсь добавить пары чисел в список, сгруппированный по фигурным скобкам, но это не так • работать с подстановкой переменных.

set new_list {}
lappend new_list {4 5}
lappend new_list {7 8}
puts "$list"

Вывод:

{4 5} {7 8}

Это желаемый формат. Однако, когда я попробую следующее, скажем, например, я хотел, чтобы все целые числа были равны 10, а их квадратичное значение добавлялось в список в виде пар:

for {set i 0} {$i < 10} {incr i} {
    lappend new_list {$i [expr pow($i, 2)]}
}

Вывод:

{$i [expr pow($i, 2)]} {$i [expr pow($i, 2)]} {$i [expr pow($i, 2)]} {$i [expr pow($i, 2)]} .... and so on ....

Я хотел бы, чтобы значения были целыми парами: {1 1} {2 4} {3 9} ...

Любая помощь в достижении этого?

1 Ответ

0 голосов
/ 24 апреля 2020

Вы должны оценить слова (выражения и т. Д. c) в то время, когда вы делаете lappend. Для этого вы создаете подсписок, который нужно добавить с помощью команды list:

for {set i 0} {$i < 10} {incr i} {
    lappend new_list [list $i [expr {$i ** 2}]]
}

Скобки сами по себе означают «не расширяйте сейчас ничего». (Это их фактическое значение в Tcl. Просто некоторые команды, такие как for, затем go прямо впереди, и делают свое дело с тем, что внутри них сразу.) В этом случае вы могли бы поместил вещи для вставки в двойные кавычки, но это плохая практика, так как это может сильно укусить вас, когда вы начнете использовать реальные данные (например, фамилии людей с пробелами в них); Команда list специально разработана (и тщательно протестирована ), чтобы не иметь таких недостатков.

В этом конкретном случае c я бы написал $i ** 2 вместо pow($i, 2), поскольку последний всегда дает результат с плавающей запятой, тогда как первый чувствителен к типам чисел c (как и другие операторы expr).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...