Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Case with strings

Reply
Thread Tools

Case with strings

 
 
Aquila
Guest
Posts: n/a
 
      03-19-2005
A similar problem:
case key.strip
when "c" "Synopsis"
when "s" "Category"
when "io" "Inputs and outputs"
when "processing" "Processing type"
when "d" "Description"
when "n" "Notes"
when "e" "Examples"
when "h" "Element handlers"
when "a" "See also"
else puts "Unknown key"
end
if key.strip == "a"
puts "This gives output"
end
unknown key
This gives output

What am I doing wrong? I'm a really Ruby newbie so probably I'm looking at
it the wrong way...
--
"May the source be with you"
 
Reply With Quote
 
 
 
 
Florian Gross
Guest
Posts: n/a
 
      03-19-2005
Aquila wrote:

> case key.strip
> when "c" "Synopsis"
> when "s" "Category"
> when "io" "Inputs and outputs"
> when "processing" "Processing type"
> when "d" "Description"
> when "n" "Notes"
> when "e" "Examples"
> when "h" "Element handlers"
> when "a" "See also"
> else puts "Unknown key"
> end
> if key.strip == "a"
> puts "This gives output"
> end
> unknown key
> This gives output
>
> What am I doing wrong? I'm a really Ruby newbie so probably I'm looking at
> it the wrong way...


You forget to put "puts" before you're Strings. This will work:

case key.strip
when "c" puts "Synopsis"
when "s" puts "Category"
...
end

And this will also work and require less repetition:

puts case key.strip
when "c": "Synopsis"
when "s": "Category"
...
end

Though I wonder if you're not better of with a Hash:

puts({
"c" => "Synopsis",
"s" => "Category",
...
}[key.strip])
 
Reply With Quote
 
 
 
 
Aquila
Guest
Posts: n/a
 
      03-19-2005
Florian Gross wrote:

<snip>
> And this will also work and require less repetition:
>
> puts case key.strip
> when "c": "Synopsis"
> when "s": "Category"
> ...
> end
>


Actually the code has less duplication, this was just an example. But why
doesn't this work:
def keyToName(key)
case key.strip
....
when "h" "Element handlers"
when "a" "See also"
else "Unknown key"
end
end

puts keyToName("a")
puts keyToName('a')
It gives "Unknown key" twice, instead of "See also" at least once.

> Though I wonder if you're not better of with a Hash:
>
> puts({
> "c" => "Synopsis",
> "s" => "Category",
> ...
> }[key.strip])


That sounds nice, is that code faster?

Thanks for your help
--
"May the source be with you"
 
Reply With Quote
 
Florian Gross
Guest
Posts: n/a
 
      03-19-2005
Aquila wrote:

> Actually the code has less duplication, this was just an example. But why
> doesn't this work:
> def keyToName(key)
> case key.strip
> ...
> when "h" "Element handlers"
> when "a" "See also"
> else "Unknown key"
> end
> end
>
> puts keyToName("a")
> puts keyToName('a')
> It gives "Unknown key" twice, instead of "See also" at least once.


Hah, I knew that you weren't supposed to use when like that. You're
actually doing this with the above code:

case key.strip
when "hElement handlers"
when "aSee also"
else "Unknown key"
end

Which of course isn't what you want. Put a "then" or ":" between the
condition and the action parts and it will work.

>>Though I wonder if you're not better of with a Hash:
>>
>>puts({
>> "c" => "Synopsis",
>> "s" => "Category",
>> ...
>>}[key.strip])

>
> That sounds nice, is that code faster?


It ought to be faster, especially when you assign the Hash to a
constant, but I doubt that it will matter much.
 
Reply With Quote
 
Malte Milatz
Guest
Posts: n/a
 
      03-19-2005
Aquila:
> case key.strip
> when "c" "Synopsis"


# You need the keyword 'then' here.

when 'c' then 'Synopsis'
# or alternatively:
when 'c'; 'Synopsis'

# And you're likely to write something like this:

answer = case key.strip
when 'c' then 'Synopsis'
# etc.
end
# now work with answer

# Consider, too, using a hash. It does what you want in a very direct and
# clean way.

# Malte
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
How to replace all strings matching a pattern with correspondinglower case strings ? anonym Java 1 01-15-2009 07:29 PM
Strings, Strings and Damned Strings Ben C Programming 14 06-24-2006 05:09 AM
how to case select with case-insensitive string ? Tee ASP .Net 3 06-23-2004 07:40 PM
Possible to turn on/off cookieless sessions dynamically on a case by case basis at run-time? Steve Franks ASP .Net 2 06-10-2004 02:04 PM
Scorsese Collection: Keep case vs Snap case Ray DVD Video 0 05-30-2004 04:04 AM



Advertisments