Re: Does "case" work on widgets?
 
> 
> The "case" construct doesn't seem to work with widgets.  For example
> the following code:
> 
>   (define z (case .m
>                 (.m ".m")
>                 (.x ".x")
>                 (else "other")))
> 
>   (write  z)
>   (newline)
> 
> Will print "other" when I expect it to print ".m" (I checked and eqv?
> returns true for (eqv? .m .m).
> 
> If the "case" is re-written as a "cond" using eqv? then it works, so
> it's not a big deal, but I thought I'd let everybody know.
> 
This is not a bug. In fact the '.m' in the case expression is evaluated and 
its 
value is a Tk-command (and not the symbol .m). The situation is exactly the 
same
as 
(define a 'b)
(write (case a
          (a "a")
          (b "b")))
Here, the value printed is "b" (the value of the a symbol) and not "a".
Using the widget-name primitive could solve your problem. 
   (define z (case (widget-name .m)
                 (.m ".m")
                 (.x ".x")
                 (else "other")))
 
   (write  z)
   (newline)
should work.
                -- Erick
Received on Fri Nov 04 1994 - 10:49:44 CET
This archive was generated by hypermail 2.3.0
: Mon Jul 21 2014 - 19:38:59 CEST