====== apply ======
Applique une fonction anonyme. Anonyme s'entend au sens ou la fonction, qui est fondamentalement identique à une procédure, n'existe que le temps de son utilisation. La commande apply est donc particulièrement utile pour écrire des commandes à usage unique.
===== Syntaxe =====
apply func ?arg1 arg2 ...?
===== Description =====
func doit impérativement être une liste de 2 éléments {args body} (comme pour une proc) ou 3 éléments {args body namespace}.
La commande apply applique la fonction func aux arguments arg1 arg2 ... et retourne le résultat.
===== Exemples =====
==== Exemple simple ====
apply [list {a b} {
puts "$a aime $b"
}] papa maman
→ papa aime maman
==== Exemple avec un namespace ====
namespace eval ::testNS {}
apply [list {x} {
variable testVar
set testVar [expr {$x*$x}]
return
} ::testNS] 5
set ::testNS::testVar
→ 25
==== Exemples plus complexes ====
Ce premier exemple montre que l'argument spécial [[:faq:args]] est valable pour apply.
apply [list {args} {
set r {}
foreach arg $args {
lappend r [string length $arg]:$arg
}
return $r
}] a bb ccc dddd
→ 1:a 2:bb 3:ccc 4:dddd
Ce deuxième exemple (écrit par Andy Goth) ne pourrait pas être écrit simplement sans apply à moins d'écrire une procédure de tri qui va polluer l'espace global, peut-être pour une unique utilisation.
lsort -command {apply {{a b} {
set result [expr {[string length $a] - [string length $b]}]
if {$result == 0} {
set result [string compare $a $b]
}
return $result
}}} {orange red yellow green blue indigo violet}
→ red blue green indigo orange violet yellow
===== Voir aussi =====
[[http://www.tcl.tk/man/tcl8.5/TclCmd/apply.htm]]
{{tag>tcl}}