在ruby中实现java enum行为

时间:2013-11-27 23:39:36

标签: ruby enums

我可以在模型中创建一些类似的东西:

MyModel::TYPE::ONE
MyModel::TYPE::TWO

其中ONETWO是字符串?我将它们放在模型中的常量中,如:

class MyModel
  TYPE = ['ONE', 'TWO']
end

所以我可以访问MyModel::Type并获取数组,但是如何再获得一个级别呢?

1 个答案:

答案 0 :(得分:2)

您可以获得所需的语法:

[~]$ irb
irb(main):001:0> module MyModel
irb(main):002:1>   module TYPE
irb(main):003:2>     ONE = 1
irb(main):004:2>     TWO = 2
irb(main):005:2>   end
irb(main):006:1> end
=> 2
irb(main):007:0> MyModel::TYPE::ONE
=> 1
irb(main):008:0> MyModel::TYPE::TWO
=> 2

这有一个缺点,或者可能是优点,允许在枚举上使用额外的“属性”,这与Java给你的不同。如果您愿意,可以将ONE和TWO的值设为map,这与Java的enum对象类似。

编辑:你也可以得到这样的值:

irb(main):009:0> MyModel::TYPE::constants
=> [:ONE, :TWO]