コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Rubyのcase文において、複数対象したい場合は , 区切りで指定できるし、その定義は配列を使うこともできる

滅多に大量のwhenとかしないんですが、やる場合のメモ

環境

$ ruby -v
ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-darwin18]

実例

対象の値が taroziro の場合だけ同じ反応をするようなcase文を書く

, で区切る場合

NAME_KEYS = "taro","ziro"


target_value = "taro"

case target_value
when "taro","ziro"
  p "taro or ziro"
when "kentaro"
  p "kentaro"
else
  p "other name"
end

とやると反応するようになる

配列で対象を管理したい場合

直感的にいくと…

NAME_KEYS = ["taro","ziro"]


target_value = "taro"

case target_value
when NAME_KEYS
  p "taro or ziro"
when "kentaro"
  p "kentaro"
else
  p "other name"
end

できそうな気がするが、結果としては

"other name"

となる、それは確かに "taro" === ["taro","ziro"] が成り立たないので当たり前

そのため、展開させると解決する

NAME_KEYS = ["taro","ziro"]


target_value = "taro"

case target_value
when *NAME_KEYS
  p "taro or ziro"
when "kentaro"
  p "kentaro"
else
  p "other name"
end

参考