1. ホーム
  2. ルビー

[解決済み] [RubyでEnumを実装するには?

2022-05-02 14:26:14

質問

Rubyでenumイディオムを実装するのに最適な方法は何ですか?Java/C#のenumのように(ほぼ)使えるものを探しています。

どのように解決するのですか?

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追記

もし、enumの値を受け渡し(例えば、データベースに保存)、その値をシンボルに変換する必要がある場合、両方のアプローチのマッシュアップがあります。

COMMODITY_TYPE = {
  currency: 1,
  investment: 2,
}

def commodity_type_string(value)
  COMMODITY_TYPE.key(value)
end

COMMODITY_TYPE[:currency]

このアプローチは、andrew-grimmの回答からヒントを得ました。 https://stackoverflow.com/a/5332950/13468

この問題を解決する方法はたくさんありますし、結局のところ、他の言語の enum のどこが気になるのか、ということになりますから。