[#7102] Ruby 1.3.4-990611 — Yukihiro Matsumoto <matz@...>

Ruby 1.3.4-990611 is out, check out:

20 messages 1999/06/11

[#7223] Ruby 1.3.4-990625 — Yukihiro Matsumoto <matz@...>

Ruby 1.3.4-990625 is out, check out:

14 messages 1999/06/25
[#7224] -Wl,-rpath on Linux (Re: Ruby 1.3.4-990625) — Ryo HAYASAKA <hayasaka@...21.u-aizu.ac.jp> 1999/06/25

早坂@会津大学です。

[ruby-dev:7258] TkVariable

From: Koji Arai <JCA02266@...>
Date: 1999-06-29 20:44:12 UTC
List: ruby-dev #7258
新井です。

あまり(全く?)、使われない機能だとは思うんですが、
Ruby/TkのTkVariableの仕様がなんだかおかしいです。

require "tk.rb"

$no = 0

def t
  begin
    $no += 1
    puts "### TEST #{$no} ###"
    yield
  rescue
    puts $!
  end
end

# TEST 1
t {
  v = TkVariable.new
  p v.value = 1		# => "1"
  p v.value		# => "1"
}

# TEST 2
t {
  v = TkVariable.new
  p v.value = "1"	# => "1"
  p v.value		# => "1"
}

# TEST 3
t {
  v = TkVariable.new
  p v.value = [1,2]	# => "1 2"
  p v.value		# => "1 2"
  p v.value = [[1,2]]	# => "{1 2}"
  p v.value		# => "{1 2}"
}

# TEST 4
# これは、 "0 1 1 2" になった方がよい?
t {
  v = TkVariable.new
  p v.value = {1=>2}	# => "-1 2"
  p v.value		# => "-1 2"
}

# TEST 5
t {
  v = TkVariable.new([])
  p v.value		# => {}
  p v[0] = 1		# => "1"
  p v.value		# => {"0"=>"1"}
  p v[1] = [1,2]	# wrong # args: should be "set varName ?newValue?"
  p v.value		#
}

# TEST 6
# これは、{"0"=>"1","1"=>"2"} かなぁ?
t {
  v = TkVariable.new([])
  p v.value = [1,2]	# error!
  p v.value		#
}		# undefined iterator `collect' for 1

# TEST 7
t {
  v = TkVariable.new([])
  p v.value = {1=>2}	# => ""
  p v.value		# => {"1"=>"2"}
  p v[1]		# => "2"

  p v.value = {1=>[2,3]}# => ""
  p v.value		# => {"1"=>"2 3"}

  p v.value = {1=>[2,[3]]}# => ""
  p v.value		# => {"1"=>"2 {3}"}
}

# TEST 8
t {
  v = TkVariable.new([])
  p v.value = [[1],[2]]	# => ""
  p v.value		# => {"0"=>"1", "1"=>"2"}
}

# TEST 9
# {"0"=>"0 1", "1"=>"2 3 4 5"}
t {
  v = TkVariable.new([])
  p v.value = [[0, 1],[2, 3, 4, 5]] # => ""
  p v.value		# => {"0"=>"0", "1"=>"1", "2"=>"3", "4"=>"5"}
}

望ましい結果をまとめて、パッチを流そうとがんばった
んですが、ここで力尽きました。思い切って機能削減し
ても良いのかも知れませんねぇ。

あと、あきらかにバグだろうと思える部分のパッチを添
付します。


--- ext/tk/lib/tk.rb.org	Fri Jun 25 01:33:28 1999
+++ ext/tk/lib/tk.rb	Wed Jun 30 04:23:45 1999
@@ -753,10 +753,9 @@
       if INTERP._eval(format('global %s; array exists %s', @id, @id)) != "1"
 	raise
       else
-	INTERP._eval(format('global %s; unset %s'), @id, @id)
 	if val == []
-	  INTERP._eval(format('global %s; set %s(0) 0; unset %s(0)', 
-			      @id, @id, @id))
+	  INTERP._eval(format('global %s; unset %s; set %s(0) 0; unset %s(0)', 
+			      @id, @id, @id, @id))
 	elsif val.kind_of?(Array)
 	  a = []
 	  val.each_with_index{|e,i| a.push(i); a.push(array2tk_list(e))}
@@ -857,7 +856,7 @@
       Tk.tk_call('trace', 'variable', @id, @trace_opts, 'rb_var')
     else
       newopts = @trace_opts.dup
-      opts.each_byte{|c| newopts += c.chr unless @newopts.index(c)}
+      opts.each_byte{|c| newopts += c.chr unless newopts.index(c)}
       if newopts != @trace_opts
 	Tk.tk_call('trace', 'vdelete', @id, @trace_opts, 'rb_var')
 	@trace_opts.replace(newopts)
@@ -877,7 +876,7 @@
       Tk.tk_call('trace', 'variable', @id, @trace_opts, 'rb_var')
     else
       newopts = @trace_opts.dup
-      opts.each_byte{|c| newopts += c.chr unless @newopts.index(c)}
+      opts.each_byte{|c| newopts += c.chr unless newopts.index(c)}
       if newopts != @trace_opts
 	Tk.tk_call('trace', 'vdelete', @id, @trace_opts, 'rb_var')
 	@trace_opts.replace(newopts)

In This Thread

Prev Next