From: Alex DeCaria <
[email protected]>
Subject: Re: Can a TkVariable store a symbol?
Date: Mon, 9 Apr 2007 08:26:33 +0900
Message-ID: said:
Thanks Morton - That's what I needed to know.
TkVariable can convert Tcl's string to Ruby's object automatically.
If you want to treat a Symbol on a TkVariable,
you can set 'default_value_type' of the TkVariable object.
For example,
-------------------------------------------------------------
$ irb
irb(main):001:0> require 'tk'
=> true
irb(main):002:0> a = TkVariable.new
=> #<TkVariable: v00000>
irb(main):003:0> a.value = :hi
=> :hi
irb(main):004:0> a.value
=> "hi"
irb(main):005:0> a.symbol
=> :hi
irb(main):006:0> b = TkVariable.new
![Smile :) :)](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
hi, :symbol)
=> #<TkVariable: v00001>
irb(main):007:0> b.value
=> :hi
irb(main):008:0> b.string
=> "hi"
irb(main):009:0> a.default_value_type
=> nil
irb(main):010:0> b.default_value_type
=> :symbol
irb(main):011:0> a.numeric
ArgumentError: invalid value for Number: 'hi'
from /usr/local/lib/ruby/1.8/tk/variable.rb:706:in `number'
from /usr/local/lib/ruby/1.8/tk/variable.rb:706:in `numeric'
from (irb):20
from :0
irb(main):012:0> a.default_value_type = :symbol
=> :symbol
irb(main):013:0> a.value
=> :hi
irb(main):014:0> b.default_value_type = :string
=> :string
irb(main):015:0> b.value
=> "hi"
irb(main):016:0> a.value = 3
=> 3
irb(main):017:0> a.value
=> :"3"
irb(main):018:0> a.numeric
=> 3
irb(main):019:0> a.symbol
=> :"3"
irb(main):020:0> a.list
=> ["3"]
irb(main):021:0> a.numlist
=> [3]
irb(main):022:0> a.bool
=> true
irb(main):023:0> a.value = 1
=> 1
irb(main):024:0> a.bool
=> true
irb(main):025:0> a.value = 0
=> 0
irb(main):026:0> a.bool
=> false
irb(main):027:0> a.value = 'yes'
=> "yes"
irb(main):028:0> a.bool
=> true
irb(main):029:0> a.value = 'no'
=> "no"
irb(main):030:0> a.bool
=> false
irb(main):031:0> a.value = true
=> true
irb(main):032:0> a.bool
=> true
irb(main):033:0> a.value = false
=> false
irb(main):034:0> a.bool
=> false
irb(main):035:0> a.value
=> :"0"
irb(main):036:0> a.string
=> "0"
irb(main):037:0> a.value = true
=> true
irb(main):038:0> a.string
=> "1"
irb(main):039:0>
-------------------------------------------------------------
And, following operations are available too.
-------------------------------------------------------------
$ irb
irb(main):001:0> require 'tk'
=> true
irb(main):002:0> a = TkVariable.new(1)
=> #<TkVariable: v00000>
irb(main):003:0> a.value
=> "1"
irb(main):004:0> a + 1
=> 2
irb(main):005:0> a.value
=> "1"
irb(main):006:0> a + 'foo'
=> "1foo"
irb(main):007:0> a.value
=> "1"
irb(main):008:0> a.numeric += 2
=> 3
irb(main):009:0> a.value
=> "3"
irb(main):010:0> a.string += 'zzz'
=> "3zzz"
irb(main):011:0> a.value
=> "3zzz"
irb(main):012:0>
-------------------------------------------------------------