Bel*_*gor 3 grails groovy config lazy-evaluation
我的grails应用程序中有一个外部和内部配置:
Config.groovy中
root = "/home/baseConf"
test {
dir = root + "/testDir"
}
Run Code Online (Sandbox Code Playgroud)
External.groovy
root = "/home/externalConf"
Run Code Online (Sandbox Code Playgroud)
内部控制器我有:
println "${grailsApplication.config.root}"
println "${grailsApplication.config.test.dir}"
Run Code Online (Sandbox Code Playgroud)
什么是印刷品:
/home/externalConf
/home/baseConf/testDir
Run Code Online (Sandbox Code Playgroud)
我想要打印的内容:
/home/externalConf
/home/externalConf/testDir
Run Code Online (Sandbox Code Playgroud)
如何通过在外部配置文件中交换这一个基本变量来更改在Config.groovy中使用一个基本变量的许多变量(如上例所示)?这样的事情甚至可能吗?
你需要改变你的dir变量(内部测试).检查下面的代码.
test {
dir = "${-> root}/testDir"
}
Run Code Online (Sandbox Code Playgroud)
此更改是必要的,因为您希望在调用dir时对其进行求值,而不是在加载Config时对其进行求值.这称为后期绑定(懒惰评估)(请参阅Ian Roberts的答案:在Config.groovy中重用Grails变量).
重要的是要注意它与Groovy语言(而不是Grails)有关.
热切评估策略如下:
def x = 1
def s = "The value of x is: ${x}"
println s //The value of x is: 1
x = 2
println s //The value of x is: 1
Run Code Online (Sandbox Code Playgroud)
另一方面,懒惰评估策略将按需评估表达式(按需调用):
def x = 1
def s = "The value of x is: ${-> x}"
println s //The value of x is: 1
x = 2
println s //The value of x is: 2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
882 次 |
| 最近记录: |