Как получить недопустимое значение Tcl из dict и проверить целое число? - PullRequest
0 голосов
/ 22 октября 2019

В моем Tcl у меня есть поиск по словарю, который может не существовать, поэтому я хотел бы сделать что-то вроде этого:

set result [dict exists $values "key"] ? [dict get $values "key"] : "<not present>"

Однако, троичный оператор оценивает предложение, которое не было принято, и он терпит неудачу.

Позже я хочу посмотреть, если значение dict равно 10, я попробовал все это, и ничего не работает, когда результат "<not present>":

set test [expr $result == 10]
set test [expr [string is integer $result] && [expr $result == 10]]
set test [expr [string is integer $result] ? [expr $result == 10] : false]

Что такое способ тестирования Tclсуществует ли ключ словаря и его значение равно 10?

Я бы предпочел не использовать числовое значение (например, -99) вместо "<not present>", чтобы я мог видеть при использовании результатов на результатычто значение не найдено.

1 Ответ

3 голосов
/ 22 октября 2019

Вам просто не хватает команды expr, которая реализует троичный оператор:

set result [expr {[dict exists $values key] ? [dict get $values key] : "<not present>"}]

В качестве альтернативы, просто используйте более подробный if

if {[dict exists $values key]} {
    set result [dict get $values key] 
} else {
    set result "<not present>"
}

Выпропущенные скобки для expr: см. https://wiki.tcl -lang.org / page / Brace + ваши + expr-essions

set result "<not present>"

set test [expr $result == 10]      ;# => missing operand at _@_
                                   ;# => in expression "_@_<not present> == 10"

set test [expr {$result == 10}]    ;# => 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...