I have the following code with a small bug in it, the case statement returns the value "other" even though the first "when" statement evaluates true and should return "boats".
I've been been looking at this for ages, must be something small.
CATEGORIES = {:boats => [1, 2, 3, 4, 5, 6],
:houses => [7, 8, 9, 10],
:other => [11,12,13,14,15,16]
}
category_id = 1
category = case category_id
when CATEGORY_CLASSES[:boats].include?(category_id); "boats"
when CATEGORY_CLASSES[:houses].include?(category_id); "houses"
else "other"
end
Thanks!
If you are eager to know how to use an OR condition in a Ruby switch case: So, in a case statement, a , is the equivalent of || in an if statement.
The case statement is a multiway branch statement just like a switch statement in other languages. It provides an easy way to forward execution to different parts of code based on the value of the expression.
It does not fall through. Ruby just doesn't have the same behavior as Java for this type of statement.
You can expand array in when statement as follows:
category = case category_id
when *CATEGORY_CLASSES[:boats]; "boats"
when *CATEGORY_CLASSES[:houses]; "houses"
else "other"
end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With