From: Morton Goldberg Date: 2007-04-09T15:38:02+09:00 Subject: Re: Can a TkVariable store a symbol? On Apr 8, 2007, at 10:24 PM, Hidetoshi NAGAI wrote: > From: Alex DeCaria > Subject: Re: Can a TkVariable store a symbol? > Date: Mon, 9 Apr 2007 08:26:33 +0900 > Message-ID: >> 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 > => # > 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(:hi, :symbol) > => # > 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) > => # > 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> > ------------------------------------------------------------- Thank you for posting this. I learned several new things about the capabilities of TkVariable from it. Regards, Morton