#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).