Вы должны подумать, какую проверку вы хотите.Например, если вы хотите просто проверить, что значение является целым числом, any integer, сделайте следующее:
if {![string is entier -strict $value]} {
error "$value is not an integer"
}
(Существует также string is integer
, но в нем используется ограниченный32-битный диапазон по историческим причинам, а string is wide
использует 64-битный диапазон. Для чисел с плавающей запятой используйте string is double
. Здесь требуется -strict
, без него также допускается пустая строка, опять же, этопо историческим причинам.)
Когда у вас есть определенный диапазон, в котором вы хотите, чтобы значение было в, вы используете составное условие:
if {![string is entier -strict $value] || !($value >= 0 && $value <= 10)} {
error "$value is not an integer in the range (0..10)"
}
Если вы делаете это много, используйтепроцедура, чтобы сделать это более ясным:
proc IntegerInRange {value lowerBound upperBound} {
expr {[string is entier -strict $value] && $value >= $lowerBound && $value <= $upperBound}
}
if {![IntegerInRange $value 0 10]} {
error "$value is not an integer in the range (0..10)"
}
if {![IntegerInRange $value2 3 25]} {
error "$value2 is not an integer in the range (3..25)"
}