====== 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}}