在C#中,我习惯于创建一个名为“Enums.cs”的文件,并在那里定义我的应用程序将需要的所有枚举……我认为这样做更容易.现在接受
Ruby,我阅读并选择模块方法来定义枚举,因为我可以将int与“单词”相关联,如:
module ContractType
Undefined = 0
Internship = 1
CLT = 2
Contractor = 4
end
现在,我如何让我的“用户”模型公开一个属性,如newGuy.CurrentContractType = ContractType.Internship?!?
我是否导入模块?延伸?或者我应该引用所有枚举所在的GlobalEnums.rb文件?
最佳答案 好问题.只需要文件顶部的GlobalEnums.rb模块,然后像这样引用模块和常量:
newGuy.currentContractType = ContractType::Internship
你会注意到在Ruby ::用于引用命名空间(类或模块)中的常量,而不是..如果你有多个嵌套级别,你只需链接:: s:
module Foo
module Bar
class Baz
Qux = "quux"
end
end
end
p Foo::Bar::Baz::Qux
# => "quux"
附:我建议浏览一下Ruby样式指南such as this one,特别是Naming section.除了极少数例外,Ruby中的方法和变量名称都是snake_case.模块和类名是CamelCase,其他常量通常是SCREAMING_CAMEL_CASE.
考虑到这一点,经验丰富的Rubyist可能会编写如下代码:
module MyApp
module ContractType
UNDEFINED = 0
INTERNSHIP = 1
CLT = 2
CONTRACTOR = 4
end
end
# Assuming this is somewhere inside the MyApp namespace...
new_guy.current_contract_type = ContractType::INTERNSHIP
†例如,严格的转换方法,如Integer(n)和快捷方式构造函数,如URI(str)
或Nokogiri::XML(str)
.