在互联网上提到JAVA枚举的最多的地方,到处都提到枚举应该全部大写(例如:ACTIVE
)。
例如:Coding Conventions - Naming Enums
但是当涉及到Rails时,在所有的示例和文档中,它们都使用小写的枚举值(例如:'active'),就像这里:http://edgeapi.rubyonrails.org/classes/ActiveRecord/Enum.html的
这是有意义的,因为Rails还通过这些枚举的名称提供示例方法(例如:obj.active?)。这是Rails中枚举被用作小写的唯一原因吗?还是还有其他原因?同样,当我们使用小写的枚举时,我们与约定不同,应该是这种情况吗?或者我们也应该在Rails中使用大写枚举?
例如,我的模型中有一个status
枚举,根据约定,它可以是 active,draft 或 inactive,应该是:
enum status: {active: 1, draft: 2, inactive: 3}
字符串
或者:
enum status: {ACTIVE: 1, DRAFT: 2, INACTIVE: 3}
型
哪一个为什么
2条答案
按热度按时间5ktev3wc1#
在Rails中,枚举应该是
snake_case
。为什么?因为枚举是用来构造方法名的。根据社区惯例,Ruby中的方法名应该是
snake_case
。使用ALLCAPS
或CamelCase
可能会导致错误和混淆,因为Ruby将这些标识符视为常量。ActiveRecord::Enum不能与诸如Java中的语言级枚举构造相比较。
声明一个枚举属性,其中的值Map到数据库中的整数,但可以按名称进行查询。
http://api.rubyonrails.org/classes/ActiveRecord/Enum.html的
ActiveRecord::枚举中的键Map不是常量。相反,它只是一个与Ruby风格的元编程一起使用的列表,它添加了一些方法,使位掩码列更容易使用(也更有趣)。
在您的示例中,它实际上相当于:
字符串
枚举类型是一种特殊的数据类型,它使变量成为一组预定义的常量。变量必须等于为其预定义的值之一。常见的示例包括指南针方向(值为NORTH、SOUTH、EAST和WEST)和一周中的日期。
https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html的
在Java中,枚举基本上是美化的switch语句,其中类常量表示可能的值。
3df52oht2#
这是有意义的,因为Rails还通过这些枚举的名称提供示例方法(例如:obj.active?)。这是RAILS中枚举作为小写使用的唯一原因吗
我认为这是主要原因,是的。在ruby中,像
obj.Active?
和obj.ACTIVE?
这样的方法是非常不统一的。一个人不需要更多的理由。:)