проверка, существует ли элемент списка в TCL, не может его найти

#tcl

#tcl

Вопрос:

у меня есть список строк tcl

 set NameList [list 'foo' 'moo 1' 'too 1 3' 'Enterprise 1'] 
and i try to check if "foo" is in the list but i get false
set test "foo"
 if {[lsearch -exact $NameList $test] >= 0} {    
        return 1
  }   
  

Обновить
я изменил двойные кавычки на одинарные кавычки, НО я установил переменную test с помощью «foo»
, но все равно это не работает

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

1. Я проверил это, и он работает нормально. lsearch -exact $NameList "foo" вернет 0, который представляет индекс элемента foo в списке NameList .

2. Фигурные скобки используются в tcl для обертывания строки пробелами. В tcl все является строкой, даже списки. Итак, вы не сделали что-то не так.

3. Одинарные кавычки не являются символом кавычки в Tcl.

4. Чтобы подчеркнуть, что сказал Брэд: одинарные кавычки — это просто простые символы в Tcl. Первый элемент в $NameList — это строка из 5 символов "'foo'"

Ответ №1:

Когда я пробую ваш код, он работает точно правильно для меня:

 % set NameList [list "foo" "moo 1" "too 1 3" "Enterprise 1"] 
foo {moo 1} {too 1 3} {Enterprise 1}
% if {"foo" in $NameList} { puts "got it!" }
got it!
% lsearch -exact $NameList "foo"
0
% lsearch -exact $NameList "not there at all"
-1
  

Автоматическое цитирование строк с { помощью … } вместо " " — это не то, о чем вам нужно беспокоиться. Это не повлияет на значения в списке; они будут точно такими строками, которые вы указали.

О, и для простых тестов удержания буквального значения рассмотрите in оператор, как я его использую выше. Это понятнее и говорит о том, что вы имеете в виду больше. Доступно в любой поддерживаемой в настоящее время версии Tcl (т. Е. Введено в 8.5).