2016-12-15 3 views
1

У меня есть этот кусок кода, который проверяет синтаксис истинного или ложного значения, что-то вроде 1 истинно и 0 ложно, и если что-то другие, то ошибка от:Каков лучший способ проверить синтаксис истины ложного значения в itcl?

itcl::body boolean::validateSyntax {} \ 
{ 
    if {![string equal [getData] "1"] && \ 
     ![string equal [getData] "0"] && \ 
     ![string equal [getData] "true"] && \ 
     ![string equal [getData] "false"]} \ 
    { 
     errorHandle-errMsg \ 
      "Invalid boolean value." 
    } 
} 

Пожалуйста, дайте мне знать, если есть какие-либо другим способом мы можем это сделать, некоторой логикой кода, которая проверила бы для 0 или 1 для true или false с помощью «getData» и обрабатывала другие случаи как ошибку.

ответ

2

Если вы хотите жить с понятием Tcl логического типа, а именно 0, false, no или off ==> false и 1, true, yes или on ==> true, то string is boolean выполнит тест.

1

Можно использовать

if {[getdata] ni {0 1 true false}} ... 

Этот код делает именно то, что код в этом вопросе делает. Команда string is boolean в ответе Айя Манго гораздо более гибкая.

Документация: if, ni (operator), string

+0

Разумно, но я предпочитаю 'тесты is' строки. –

+0

Строка является логическим тестом, который также позволяет использовать аббревиатуры и верхние регистры. Трудно сказать, хорошо ли это или плохо, если не знать, какой набор значений getData возвращается. –

+0

Я предпочитаю, чтобы строка была логической, но нет никакого вреда в предоставлении альтернативы. –