>>303 はどれか一つしか実行されないつもりでいましたけど…。

それは承知しています。
ただし、ブロック化していない複数の式を一つの処理単位として扱うのは不自然な気がするので。

>when 2, 3 : //X = 2 の時 ×と□だけが表示される
>  puts("×");
>  puts("□");
> else: ...;
>  puts("△");

puts("□"); の後、暗黙で(Cでいう)breakしちゃうのはどうかと思うので。
各節は一つのsyntax/blockを受け取る様にすれば自然かな、と。