Case statement with multiple values in each 'when' block Case statement with multiple values in each 'when' block ruby ruby

Case statement with multiple values in each 'when' block


In a case statement, a , is the equivalent of || in an if statement.

case car   when 'toyota', 'lexus'      # codeend

Some other things you can do with a Ruby case statement


You might take advantage of ruby's "splat" or flattening syntax.

This makes overgrown when clauses — you have about 10 values to test per branch if I understand correctly — a little more readable in my opinion. Additionally, you can modify the values to test at runtime. For example:

honda  = ['honda', 'acura', 'civic', 'element', 'fit', ...]toyota = ['toyota', 'lexus', 'tercel', 'rx', 'yaris', ...]...if include_concept_cars  honda += ['ev-ster', 'concept c', 'concept s', ...]  ...endcase carwhen *toyota  # Do something for Toyota carswhen *honda  # Do something for Honda cars...end

Another common approach would be to use a hash as a dispatch table, with keys for each value of car and values that are some callable object encapsulating the code you wish to execute.


Remember switch/case (case/when, etc.) is just comparing values. I like the official answer in this instance for a simple or'd string list comparison, but for more exotic conditional / matching logic,

case true  when ['honda', 'acura'].include?(car)    # do something  when (condition1 && (condition2 || condition3))    # do  something different  else    # do something elseend