如何在Ruby中实现枚举?

在Ruby中实现enum习惯用法的最佳方法是什么?我正在寻找一些我可以(几乎)使用的东西,比如Java/C#enums

两种方式。符号(:foo符号)或常量(foo符号)

当您希望增强可读性而不将代码与文字字符串混在一起时,符号是合适的

邮政编码[:明尼苏达州]=”;MN"
邮政编码[:纽约]="“纽约”;

当您有一个重要的基础值时,常量是合适的。只需声明一个模块来保存常量,然后声明其中的常量

模块Foo
巴=1
BAZ=2
BIZ=4
终止
flags=Foo::BAR | Foo::BAZ#flags=3

新增2021-01-17

如果要传递枚举值(例如,将其存储在数据库中),并且需要能够将该值转换回符号,那么这两种方法都是混搭的

商品类型={
货币:1,
投资:2,
}
def商品类型字符串(值)
商品类型键(值)
终止
商品类型[:货币]

这种方法的灵感来自andrew grimm的回答https://stackoverflow.com/a/5332950/13468

我还建议您通读这里的其余答案,因为有很多方法可以解决这个问题,它实际上可以归结为您关心的其他语言的枚举

发表评论