Сплит строка повторения Tcl - PullRequest
0 голосов
/ 10 ноября 2018

Я новичок в Tcl и столкнулся с проблемой понимания всей этой концепции:

<name of variable> set [split "[string repeat "-,-," [columns]]-",]

столбцы - переменная со значением 6; Каким будет разделение и какая у меня вся строка?

Спасибо всем

1 Ответ

0 голосов
/ 10 ноября 2018
<name of variable> set [split "[string repeat "-,-," [columns]]-",]

Вы должны распаковать команды Tcl изнутри, потому что самые внутренние вложенные скобки выполняются первыми.

  • columns - это proc , который, мы надеемся, возвращает целое число.
  • затем string repeat повторяет "-, -," столько раз.
  • тогда строка в двойных кавычках добавляет завершающий -
  • затем split должен разбить эту строку "-, -, -, ...-" на запятые, что приведет к * списку "2 * столбцов + 1" дефисов *.

За исключением

  • отсутствует пробел перед последней запятой в команде split
  • команда set выглядит следующим образом: set varname value (если вы не имеете дело с объектом)
set <name of variable> [split "[string repeat "-,-," [columns]]-" ,]
# ...............................................................^

Демонстрация:

set columns 6
proc columns {} {return $::columns}
set result [split "[string repeat "-,-," [columns]]-" ,]
puts $result
puts [llength $result] ;# should be 13
- - - - - - - - - - - - -
13

Вы можете достичь того же результата с:

set result [lrepeat [expr {2 * [columns] + 1}] "-"]

Tcl на самом деле очень простой язык. Весь синтаксис имеет только 12 правил: https://www.tcl.tk/man/tcl8.6/TclCmd/Tcl.htm

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