RubyでEnumを実装するには?質問する

RubyでEnumを実装するには?質問する

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

これを解決する方法はたくさんあるので、他の言語の列挙型についてあなたが気にしていることが何であるかに本当に帰着するので、ここにある残りの回答も読むことをお勧めします。

おすすめ記事