2015-11-25 5 views
4
set var1 A 

set var2 {A} 

Можно ли проверить, существует ли переменная в TCL? Для var1 и var2llength дает 1. Я думаю, что эти 2 переменные считаются одинаковыми. Это оба списка с 1 элементом. Я прав?TCL: проверьте, есть ли переменная

ответ

7

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

Вам необходимо написать свой код, чтобы не предполагать, что он может выглядеть, проверяя тип значения. Тип 123 может быть много разных вещей, таких как целое число, список (длина 1), строка юникода или имя команды. Семантика Tcl основана на вас не, спрашивая, что такое тип значения, а просто использует команды и заставляя их при необходимости принудительно вводить значения. Tcl отличается от многих других языков в этом отношении.

Из-за этого различного подхода нелегко ответить на вопросы об этом в целом: ответы слишком длинны со всеми возможными случаями, которые следует учитывать вообще, но большинство из них не будет иметь никакого отношения к тому, re действительно стремится сделать. Однако спросите о чем-то конкретном, и мы сможем рассказать вам гораздо легче.

3

Вы можете попробовать string is list $var1, но это будет принимать обе эти формы - оно вернет false только на то, что невозможно синтаксически интерпретировать как список, например. потому что существует непревзойденная скобка типа «aa {bb».

Смежные вопросы