2016-12-29 2 views
2

Je n'ai pas réussi à comprendre comment intégrer expr dans d'autres constructions. Je peux facilement saisirComment utiliser expr inside if instruction?

set i {1 2 3} 
expr {[llength $i]} #result is 3 

Cependant, après de longues recherches, je ne l'ai pas réussi à trouver un moyen de mettre à l'intérieur que si

if {"magic tcl code with expr and llength==3 required here"} { 
    puts "length is 3" 
} 

Répondre

4

Le premier argument à if est une expression, tout comme l'argument expr est une expression.

if {[llength $i] == 3} { 
    puts "length is 3" 
} 

Vous pouvez en effet mettre expr dans une expression en utilisant [ supports ], tout comme avec toute commande, mais il n'y a généralement pas de raison de le faire; ça rend tout plus verbeux. L'exception à la règle ci-dessus survient lorsque vous avez une expression qui est en quelque sorte dynamique; Il est logique de placer un expr dans une expression car cela permet de compiler efficacement les parties externes.

# Trivial example to demonstrate 
set myexpression {[llength $i]} 

if {[expr $myexpression] == 3} { 
    puts "evaluated $myexpression to get three" 
} 

C'est plutôt rare.

1

La commande if a un expr intégré. Plus précisément les deux if et expr attend et expression que le premier argument:

if expression ... 
expr expression 

Par conséquent, si vous voulez exécuter expr {[llength $i]} puis juste faire:

if {[llength $i]} { 

} 

Mais pour vous dire la vérité, je ne croyez que vous voulez exécuter

expr {[llength $i]} 

Je pense que ce que vous voulez est de vérifier si la longueur est 3, donc ce que vous voulez vraiment est

expr {[llength $i] == 3} 

Si tel est le cas, alors la version if serait:

if {[llength $i] == 3} { 
    puts "llength is 3" 
}