语法糖/聪明的hack问题。

我想以一种比以下方式更优雅/更简洁的方式编写多环境配置块(它可以工作,但是很难看):

environments {
    development {
        // long list of directives
    }
    ["staging", "production"].each{"$it"{  // <- ugly!
        // another long list of directives
    }}
}

我试图一起破解一些DSL,如下所示,将propertyMissing添加到EnvironmentBlockEvaluator.metaClass,但我做不到。主要问题在于,配置文件中的裸词(例如staging)在groovy.util.ConfigObject中的闭包有机会对其执行任何操作之前被转换为空的environments { }。我不知道为什么。
(staging | production) {
    // directives
}

有什么聪明的主意吗?

最佳答案

您可以在switch中使用resources.groovy块-我认为它也适用于Config.groovy(尽管尚未进行实际测试)。

switch (Environment.current) {
    case Environment.DEVELOPMENT:
    case Environment.TEST:
    //stuff for dev & test environments
    break
    default:
    //production stuff
}

但是,仅比["staging", "production"].each{"$it"...稍微容易一点。

10-02 23:42