Message-Id: <199607051744.TAA06845@cadet.inria.fr>
To: henry@kelenn-gw.univ-brest.fr (licence informatique)
Subject: Re: Utilisation de
Date: Fri, 05 Jul 1996 19:44:32 +0200
From: Francois Rouaix <rouaix@cadet.inria.fr>
Cher usager,
> Je souhaite utiliser une fonction retournant une valeur avec l'option Command
> dans un menu;
> par exemple :
> menu__add_command m [Label "Essai"; Command (let t = f(n))];
>
> Il s'avere que cette instruction ne fonctionne pas car, l'option Command
> accepte que les fonctions de type unit -> unit;
De toutes facons elle est syntaxiquement incorrecte.
Les callbacks (Command ou autres) ne retournent jamais de valeur, pour
la simple raison que leur appelant est la boucle mainLoop de Tk. Ca n'a donc
pas de sens de renvoyer une valeur, sauf si la specification du callback
demande une valeur de retour (ce qui n'est jamais le cas pour la partie
standard de Tk). D'ou le -> unit pour tous les types de callbacks.
> Est-il possible de resoudre ce probleme sans utiliser des variables globales
> mutables ?
Les callback sont par essence des fonctions qui produisent des effets de bord.
On utilise effectivement assez souvent des references ou des valeurs mutables
dans ce type de situation. La reference n'a pas forcement besoin d'etre
definie globalement bien sur, il suffit qu'elle ait la bonne portee.
----
Dear user,
[The question was about the inability to return values from callbacks]
Anyway, the example above is syntactically incorrect.
Callbacks (Command or others) never return values, for the simple reason
that their caller is the Tk mainLoop. Returning a value has no meaning,
except if the callback specification required a return value, which is
never the case in the standard Tk. Thus the -> unit for any callback type.
--f