From: matz@... (Yukihiro Matsumoto) Date: 1997-01-20T10:36:32+09:00 Subject: [ruby-list:1775] Re: variable and value (TkRadioButton) まつもと ゆきひろです In message "[ruby-list:1770] variable and value (TkRadioButton)" on 97/01/19, Noritugu Nakamura writes: |中村です。 | |↓と同じのを ruby/Tk で書いたつもりなのですが、 |同じ動作をしません。どうしてでしょうか? 例によってバグです.以下のパッチで直っているようです. # rubyのソースがあるディレクトリで patch -pしてください --- lib/tk.rb~ Sat Jan 18 01:06:00 1997 +++ lib/tk.rb Mon Jan 20 10:33:50 1997 @@ -358,6 +358,32 @@ def bind(context, cmd=Proc.new, args=nil) _bind path, context, cmd, args end + + + def tk_trace_variable(v) + v = v.id2name unless v.kind_of? String + if v !~ /^\$/ + fail ArgumentError, "variable must be global(%s)", v + end + vn = 'tk_trace_v_' + v + vset = format("global {%s}; set {%s} %%s", vn, vn) + tk_write vset, eval(v).inspect + trace_var v, proc{|val| + tk_write vset, val.inspect + } + tk_call 'trace vdelete', vn, 'w', @var_id if @var_id + @var_id = install_cmd(proc{|name1,| + val = tk_call(format('global %s; set', name1), name1) + eval(format("%s = '%s'", v.id2name, val)) + }) + tk_call 'trace', 'variable', vn, 'w', @var_id + vn + end + private :tk_trace_variable + + def destroy + tk_call 'trace vdelete', vn, 'w', @var_id if @var_id + end end class TkWindow