入力値が、ある決められた値に一致する場合の分岐方法のちょっとしたテク。

selectID という変数をいろんな値に一致させ、処理を分ける。

---------------------------------
#条件が一個
1: if selectID == 1 then calc1()
2: elsif selectID == 2 then calc2()
3: elsif selectID == "A" then calcA()
4: end

---------------------------------
#条件が増えたら、一行が長くなる。
1: if selectID==1 || selectID==10 || selectID==12 then calc1()
2: elsif selectID==2 || selectID==20 || selectID==22 then calc2()
3: elsif selectID=="A" || selectID == "A1" || selectID =="A2" || then calcA()
4: end

---------------------------------
#case文で表記できるが、行数が増える。複数処理ができない。
1: case selectID
2: when 1,10,12 then calc1()
3: when 2,20,22 then calc2()
4: when "A","A1","A2" then calc2()
5: end

そこで、

---------------------------------
#マッチ方式。文字列と数値を同列に扱える。
1: calc1() if '_1_10_12_' =~ /"_#{selectID}_"/
2: calc2() if '_2_20_22_' =~ /"_#{selectID}_"/
3: calcA() if '_A_A1_A2_' =~ /"_#{selectID}_"/

---------------------------------
#マッチ方式、複数処理も可能(B=1,2 C=2,A)
1: calc1() if '_1_10_12_B_' =~ /"_#{selectID}_"/
2: calc2() if '_2_20_22_B_C_' =~ /"_#{selectID}_"/
3: calcA() if '_A_A1_A2_C_' =~ /"_#{selectID}_"/

条件の値が一覧になっているので、編集しやすいが、変数に分離記号「_」を使えない。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━