From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from weis@localhost) by pauillac.inria.fr (8.6.10/8.6.6) id VAA08758 for caml-redistribution; Fri, 5 Jul 1996 21:13:53 +0200 Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.6.10/8.6.6) with ESMTP id TAA07491 for ; Fri, 5 Jul 1996 19:44:59 +0200 Received: from cadet.inria.fr (root@cadet.inria.fr [128.93.11.17]) by concorde.inria.fr (8.7.1/8.7.1) with ESMTP id TAA07933; Fri, 5 Jul 1996 19:44:58 +0200 (MET DST) Received: from cadet.inria.fr (rouaix@localhost.inria.fr [127.0.0.1]) by cadet.inria.fr (8.6.12/8.6.6) with ESMTP id TAA06845; Fri, 5 Jul 1996 19:44:33 +0200 Message-Id: <199607051744.TAA06845@cadet.inria.fr> X-Mailer: exmh version 1.6.4 10/10/95 To: henry@kelenn-gw.univ-brest.fr (licence informatique) cc: caml-list@pauillac.inria.fr Subject: Re: Utilisation de In-reply-to: Your message of "Thu, 04 Jul 1996 17:17:37 +0200." <199607041517.RAA02101@kelenn-gw.univ-brest.fr> Reply-To: Francois.Rouaix@inria.fr Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Fri, 05 Jul 1996 19:44:32 +0200 From: Francois Rouaix Sender: weis 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