>From: "Aristarkh A Zagorodnikov" <xm / w3d.ru>
>Reply-To: ruby-talk / ruby-lang.org
>To: ruby-talk / ruby-lang.org (ruby-talk ML), <ruby-talk / netlab.co.jp>
>Subject: [ruby-talk:10842] Possible bug in Hash implementation
>Date: Wed, 14 Feb 2001 23:52:56 +0900
>
>
>		Hello !
>
>	First, I want to excuse - because this may be not a bug in ruby, but a bug
>in my DNA ;)
>	I tried following on: 1.6.2/i686-linux, 1.6.2 stable-snapshot/i686-linux,
>1.7.0/i686-linux, 1.6.2/i586-win32, 1.7.0/i586-cygwin, 1.7.0/i586-mswin32.
>
>	When $= is set to true (case-insensitive), hash access is ... errrm ...
>invalid for textual keys at least. It precisely lists the hash ('print
>hash.inspect' prints hash with keys/values), but accessing to hash using 
>one
>of the keys (even value, recieved from each iterator: 'hash.each {|k, v|
>print hash[k]}, produces nil.
>
>	Maybe it is the intended behaviour ... but it is at least breaking the
>logic ... and I love ruby for logic.
>
><code>
>#!/usr/local/bin/ruby
>
>class StoredMethod
>     attr_accessor :name, :desc
>     def initialize (name, desc)
>         @name, @desc = name, desc
>     end
>end
>
>class StoredClass
>     attr_accessor :name, :members, :desc
>     def initialize (name, desc)
>         @name, @members, @desc = name, {}, desc
>     end
>end
>
>$classes = {}
>$classes['TestClass'] = StoredClass.new 'TestClass', 'TestClass 
>description'
>$classes['TestClass'].members['TestMember']={'name' => 'TestMember', 'desc'
>=> 'TestMember description' }
>
>saved = $=
># comment next line to get valid results
>$= = true
>$classes.each_value {|cl|
>     cl.members.each_value {|c|
>         p c
>         p c['name']
>     }
>}
>$= = saved
></code>
>
>Aristarkh A Zagorodnikov, Lead Programmer, W3D Group
>http://www.w3d.ru /// xm / w3d.ru /// ICQ UIN 36987938
>

I have an inkling of why this might be, but I'll leave that to someone more 
sure of it (well, I think it has to do with the context in which you create 
the hash, and that which you access it).  However, If you move the $= 
assignment to the line just above $classes = {}, it works.  Incidentally, 
you don't appear to need the global vars, although it's difficult to be sure 
as I don't know if this is the complete program, etc.  Just something to 
think about.


Mike Wilson
Unix Administrator
http://ruby.weblogs.com

_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com