From: Hidetoshi NAGAI Date: 2007-04-09T11:24:05+09:00 Subject: Re: Can a TkVariable store a symbol? 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> ------------------------------------------------------------- -- Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)