Smalltalk et les blocs multi-paramétrés
La problématique est la suivante : comment passer trois paramètres à un bloc, provenant d’une collection (Array, OrderedCollection, ou tout autre …).
monTab := #(1 2 'add').monBloc := [:op1 :op2 :op3 | duCode. ^unResultat].
Je veux executer monBloc avec le contenu de monTab comme paramètres. L’utilisation de do: n’est ici pas appropriée : do: est un message compris par une collection, pas par un bloc. Et pourtant, la réponse est dans cette réponse : un bloc est un objet, comme tout en smalltalk. Il existe donc un message permettant de donner un paramètre à un bloc. Ce message est value: :
monBloc := [:op1 :op2 :op3 | duCode. ^unResultat].monBloc value: 1 value: 2 value: 'add'.
Pour obtenir les éléments de monTab, je propose l’utilisation d’un ReadStream. Cependant, un acces direct aux éléments est aussi possible. Voici les deux solutions :
monTab := #(1 2 'add').monBloc := [:op1 :op2 :op3 | duCode. ^unResultat]." Accès direct aux éléments "monBloc value: (monTab first) value: (monTab at: 2) value: (monTab last)." Une seconde solution : "monStream := monTab readStream.monBloc value: monStream next value: monStream next value: monStream next.
Et voilà !
Tags : code • Smalltalk • Smalltalk programming • VisualWorks

Commentaires récents