Ruby で enum イディオムを実装する最良の方法は何ですか? Java/C# enum とほぼ同様に使用できるものを探しています。
ベストアンサー1
2 つの方法。記号 (:foo
表記法) または定数 (FOO
表記法)。
シンボルは、リテラル文字列でコードを散らかさずに読みやすさを向上させたい場合に適しています。
postal_code[:minnesota] = "MN"
postal_code[:new_york] = "NY"
定数は、重要な基礎値がある場合に適しています。定数を保持するモジュールを宣言し、その中で定数を宣言するだけです。
module Foo
BAR = 1
BAZ = 2
BIZ = 4
end
flags = Foo::BAR | Foo::BAZ # flags = 3
2021-01-17 追加
列挙値を渡す場合(たとえば、データベースに保存する場合)、その値をシンボルに戻す必要がある場合は、両方のアプローチを組み合わせた方法があります。
COMMODITY_TYPE = {
currency: 1,
investment: 2,
}
def commodity_type_string(value)
COMMODITY_TYPE.key(value)
end
COMMODITY_TYPE[:currency]
このアプローチはアンドリュー・グリムの回答に触発されたものであるhttps://stackoverflow.com/a/5332950/13468
これを解決する方法はたくさんあるので、他の言語の列挙型についてあなたが気にしていることが何であるかに本当に帰着するので、ここにある残りの回答も読むことをお勧めします。