我有一个包含几个常量的模块:
[My::Very::Long::Module::Name::FIRST_CONSTANT, My::Very::Long::Module::Name::SECOND_CONSTANT]
在其他地方,我想构建一个包含其中一些常量的数组:
production:
adapter: postgresql
database: main
username: main_user
connect_remote:
adapter: postgis
database: secondary
username: main_user
schema_search_path: public, postgis
这很烦人。有没有更好的方法,也许不必总是使用模块名称前缀?
答案 0 :(得分:2)
您可以创建一些别名
M = My::Very::Long::Module::Name
p [M::FIRST_CONSTANT, M::SECOND_CONSTANT]
答案 1 :(得分:2)
这取决于你究竟想要在那里实现的目标。一种可能的解决方案是将您的数组构建得更接近常量。看看这个完全成熟的例子:
module Postable
FREE_POST_TYPES = ['text', 'image']
PREMIUM_POST_TYPES = ['video']
def types
FREE_POST_TYPES + PREMIUM_POST_TYPES
end
end
class Article
extend Postable
end
Article.types # => ["text", "image", "video"]
答案 2 :(得分:0)
您可以使用const_get
:
%i(FIRST_CONSTANT SECOND_CONSTANT).map { |c|
My::Very::Long::Module::Name.const_get(c)
}
#=> [1, 2]