Rubyのcaseは最後に評価した式の結果を返します。
次のRubyのコードでは、caseの返した値を変数iに代入しています。
i = case something
when FOO
1
when BAR
2
else
3
end
Delphi(Object Pascal)でも、caseで値を返したい。
無名メソッドを使えば、次のようにできました。
i := (function(): Integer
begin
case something of
FOO: Exit(1);
BAR: Exit(2);
else Exit(3);
end;
end)();
Delphi XE6で確認しました。
C++の場合は次のようになります。(switchを式にする in C++11 – Faith and Brave – C++で遊ぼうを参考にしました。)
auto i = [&]{ switch (something) {
case FOO: return 1;
case BAR: return 2;
default: return 3;
}}();