c# – Ruby – 枚举文件

在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).

点赞