下記ツールRubyでenum(列挙型)を使いたかったけど、Rubyには明確な列挙型のようなクラスが無く、少しハマったのでφ(..)メモメモ
Rubyでenum(列挙型)を使うには
Rubyにはenumがありません。そのためmodule
を使ってenumを表現します。
下記のように複数の定数値をmoduleの中に定義することで、enumのような振る舞いをさせることが出来ます!
# 定数のため、変更が入らないように`.freeze`を記載しています。 module Lang ENG = 'en'.freeze JPN = 'ja'.freeze end
定数値を呼び出すにはモジュール名::定数名
というような形で記述します。
puts Lang::ENG # 結果 : en puts Lang::JPN # 結果 : ja
おまけ:全ての定数の値を取得する
moduleクラスに全ての定数値の値を取得するようなメソッドが無さそうだったので、自分で作ってみました。
constants
で全ての定数値の変数名を取得し、それを使ってevalで値を取得し直して配列で返しています。
module
で定義した定数のリストに属さない入力値のチェック等に使えるのではないかなと思いますφ(..)
module Lang ENG = 'en'.freeze JPN = 'ja'.freeze def self.all_lang self.constants.map{ |lang| eval("#{lang}") } end end
↓動作確認はこちら
参考
https://qiita.com/yuch_i/items/fa823a5ee3d569859137qiita.com
以上