Как понять, когда использовать знак $ с командами списка в TCL?

#list #function #scripting #command #tcl

#Список #функция #сценарии #команда #tcl

Вопрос:

Здесь у нас есть 3 команды: lindex, lappend и length .

Если я хочу их использовать, мне нужно использовать знак $ с lindex и llength, но мне не нужно использовать его с lappend.

Посмотрите на следующие коды:

 set list_name {1 2 3 4 5}
puts [lindex $list_name 1]
lappend list1 6
puts [llength $list_name]
 

Как я могу понять, после какой команды мне нужно использовать знак $ с именем переменной и когда мне не нужно его использовать?

Комментарии:

1. Боюсь, лучший ответ: прочитайте документы => tcl-lang.org/man/tcl8.6/TclCmd/contents.htm — обратите внимание на примеры

Ответ №1:

Общее правило таково: если Tcl считывает значение переменной, используйте $ . При изменении существующей переменной используется no $ , используется имя переменной.

  • lappend напрямую изменяет свой аргумент, поэтому он принимает имя переменной.
  • lindex считывает значение списка по некоторому индексу, поэтому используется значение списка.
  • llength считывает значение списка, поэтому используется значение списка.

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

Напрямую изменяет список:

  • lappend
  • lset

Использует значение списка:

  • lindex
  • длина
  • lreplace
  • lmap
  • lrange
  • lreverse
  • lsearch
  • lsort

Комментарии:

1. foreach это еще одна команда, которая использует значения списка.

Ответ №2:

Одним из соглашений в документации tcl является использование varName или TypeVariable для объектов, которые принимают имя переменной и изменяют содержимое переменной, и typeValue или type (например, list, string , dictionaryValue) для объектов, которые принимают значение этого типа. Последний случай — это когда вы используете $foo для передачи содержимого переменной. Первый случай — это когда вы используете foo (если, конечно, имя переменной, которую вы хотите использовать, само находится в переменной).

Вы также должны быть знакомы с Додекалогом, если вы работаете с tcl, чтобы знать, что $ означает и как его можно использовать в целом (правило 8).