论坛首页 编程语言技术论坛

个人感觉关于Set类的两个缺陷

浏览 8977 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-08-07  
看来确实是个缺陷,1.8.7版本已经将其修正了。
0 请登录后投票
   发表时间:2009-08-07  
大家都讨论这么高深了,我起初还因为是java呢,原来是ruby,唉,落伍了。
0 请登录后投票
   发表时间:2009-08-07  
nj0308 写道
看来确实是个缺陷,1.8.7版本已经将其修正了。
xxx@xxxx-laptop:~$ ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-linux]
xxx@xxxx-laptop:~$ irb -v
irb 0.9.5(05/04/13)
xxx@xxxx-laptop:~$ irb
irb(main):001:0> require 'set'
=> true
irb(main):002:0> s1 = Set.new [1,2]
=> #<Set: {1, 2}>
irb(main):003:0> s2 = Set.new [1,2]
=> #<Set: {1, 2}>
irb(main):004:0> s1==s2
=> true
irb(main):005:0> s = Set.new
=> #<Set: {}>
irb(main):006:0> s<<s1
=> #<Set: {#<Set: {1, 2}>}>
irb(main):007:0> s<<s2
=> #<Set: {#<Set: {1, 2}>}>
 

以上是测试结果。

0 请登录后投票
   发表时间:2009-08-08   最后修改:2009-08-08
是ruby 1.8.6的bug,我系统中有两个版本ruby,测试结果如下:
ubuntu:~$ ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
ubuntu:~$ irb -v
irb 0.9.5(05/04/13)
ubuntu:~$ irb
irb(main):001:0> require 'set'
=> true
irb(main):002:0> s1 = Set.new [1,2]
=> #<Set: {1, 2}>
irb(main):003:0> s2 = Set.new [1,2]
=> #<Set: {1, 2}>
irb(main):004:0> s1 == s2
=> true
irb(main):005:0> s = Set.new
=> #<Set: {}>
irb(main):006:0> s << s1
=> #<Set: {#<Set: {1, 2}>}>
irb(main):007:0> s << s2
=> #<Set: {#<Set: {1, 2}>}>
irb(main):010:0> exit

ubuntu:~$ sudo switch_ruby 
current = ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]

Select Option

1. ruby-1.8.6-p368
2. ruby-1.8.7-p72
3. ruby-1.8.7-p160
4. ruby-1.9.1-p0
5. exit

 Your choice? : 1
Current ruby version is :
ruby 1.8.6 (2009-03-31 patchlevel 368) [i686-linux]
ubuntu:~$ ruby -v
ruby 1.8.6 (2009-03-31 patchlevel 368) [i686-linux]
ubuntu:~$ irb -v
irb 0.9.5(05/04/13)
ubuntu:~$ irb
irb(main):002:0> require 'set'
=> true
irb(main):003:0> s1 = Set.new [1,2]
=> #<Set: {1, 2}>
irb(main):004:0> s2 = Set.new [1,2]
=> #<Set: {1, 2}>
irb(main):005:0> s1 == s2
=> true
irb(main):006:0> s = Set.new
=> #<Set: {}>
irb(main):007:0> s << s1
=> #<Set: {#<Set: {1, 2}>}>
irb(main):008:0> s << s2
=> #<Set: {#<Set: {1, 2}>, #<Set: {1, 2}>}>


0 请登录后投票
   发表时间:2009-08-10  
就是hash的问题了

ruby 1.8.5
irb(main):019:0> s.hash
=> -605831918
irb(main):020:0> s1.hash
=> -605820668
irb(main):021:0> s2.hash
=> -605827148

ruby 1.8.7
irb(main):010:0> s.hash
=> 25
irb(main):011:0> s1.hash
=> 14
irb(main):012:0> s2.hash
=> 14
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics