From: Robert Klemme Date: 2004-04-19T17:09:55+09:00 Subject: Re: Hash, ==, key-value comparison "Zsban Ambrus" schrieb im Newsbeitrag news:20040418110453.GA2123@math.bme.hu... > On Sun, Apr 18, 2004 at 07:39:11PM +0900, Robert Klemme wrote: > > > > "Zsban Ambrus" schrieb im Newsbeitrag > > news:20040417194736.GA1309@math.bme.hu... > > > On Fri, Apr 16, 2004 at 09:23:00AM +0900, nobu.nokada@softhome.net wrote: > > > > Hi, > > > > > > > .. > > > > > > > > I feel Hash#=== would test membership, i.e., alias for > > > > Hash#key?. > > > > > > > > -- > > > > Nobu Nakada > > > > > > I'd agree with that. This way you could easily test for many possible > > > values in a case statement. > > > > Does this work? I mean > > > > h = {} > > case h > > when val1, val2 > > ... > > end > > > > Does something else: it tests val1 === h and val2 === h and not h === val1. > > Currently I don't see how Hash#=== can be used in a case to test for > > multiple values. In order to use Hash#=== in a case statement, the hash has > > to appear in the when clauses. Do I overlook something? > > > > Regards > > > > robert > > > > > > No, I mean something like this: > > bad= {}; # bad magic words that the player might try > %w[abracadabra xyzzy hocuspocus bringmehome].each do |x| bad[x]=1 end; > # this list of (bad) magic words might get very long > > ... > > (in a loop) > .... > gets > ~/^\s*(\w+)/ and word= $1 > case word > when bad > puts "That won't work in this game. Nice try, thuogh." > when "aardvark" # this is the real magic word > player.move(Home) > when "a", "ahead" > player.move_ahead > when "fight", "shoot" > (.... check if there's a monster here, kill it with 1/2 probability, > otherwise make it angry ...) > .... > end Ah, ok I see. Thx! I like especially the "when bad". :-) robert