From: "Brian Schröder" Date: 2005-08-26T22:36:19+09:00 Subject: Re: symbols vs. strings On 26/08/05, Mark Volkmann wrote: > On 8/26/05, Brian Schr�der wrote: > > On 26/08/05, Mark Volkmann wrote: > > > I got the impression that when a method expects a Hash containing > > > certain keys, I can generally specify the keys using either Symbol or > > > String objects. So I tried this. > > > > > > h = {} > > > h[:foo] = 19 > > > h['foo'] = 20 > > > > > > and was surprised to see that those are treated as distinct entries in the Hash. > > > > > > So how is it that I can sometimes choose whether I want to specify a > > > given key as either a Symbol or a String? > > > > > > For example, when using Tk and w represents some widget, I think I can > > > say either > > > > > > w.pack(:side => 'top') > > > > > > or > > > > > > w.pack('side' => 'top') > > > That can e.g. be implemented like this: > > > > def pack(arghash) > > arghash = arghash.inject({}) { | r, (k, v) | r[k.to_s] = v; r } > > side = arghash['side'] > > ... > > end > > Just to clarify, are you saying that ... > > 1) If I want my code that accepts a Hash parameter to allow keys to be > either Symbols or Strings, I need to use an approach like you showed > above. > > 2) Many existing Ruby classes do this. Yes, that is two times true. Hashes do not special-case for strings or symbols. (Nearly) anything can go into a Hash as keys. Generally ruby does not special case very often. Thats what makes it so nice to learn and use. regards, Brian > > -- > R. Mark Volkmann > Partner, Object Computing, Inc. > > -- http://ruby.brian-schroeder.de/ Stringed instrument chords: http://chordlist.brian-schroeder.de/