On Apr 7, 2007, at 3:18 PM, Alex DeCaria wrote:

> If I put a symbol into a TkVariable, it returns a string.  The  
> following
> code
> illustrates this:
>
> require 'tk'
> a = TkVariable.new
> a.value = :hi
> puts a.value == :hi
> puts a.value == "hi"
>
> This results in
>
> "false"
> "true"
>
> My question is, "Is this what's supposed to happen, or is this a bug?"

It's not a bug. A TkVariable object doesn't maintain a @value  
instance variable. So when you call TkVariable#value= and pass it a  
symbol, the symbol will have to be coerced into something that the  
underlying tcl/tk interpreter understands, which is a string. When  
you call TkVariable#value, the string is retrieved from the tcl/tk  
interpreter, but your TkVariable object has no memory of how the  
value originated at this point.

To see how TkVariable handles different kinds of values, you can  
evaluate code similar to the following:

<code>
require "tk"
v = TkVariable.new(:foo)
v.value # => "foo"
v = TkVariable.new([1, 2, 3])
v.value # => "1 2 3"
v = TkVariable.new(:foo => "red", :bar => "green")
v.value # => {"foo"=>"red", "bar"=>"green"}
</code>

Note that hashes are handled specially. Personally, I have not  
encountered a situation which needed a TkVariable object that was  
built on a hash, but I'm sure such situations exist. Indeed, I would  
be interested if someone would post something instructive about such  
situations.

Regards, Morton