我是Grails / Groovy的新手,所以请耐心等待我尝试理解我在书中遇到的一段代码。
这是一个简单的Album域类:
class Album {
String artist
String title
List songs = []
List durations = []
static constraints = {
artist blank: false
title blank: false
songs minSize:1, validator:{ val, obj ->
if(val.size() != obj.durations.size())
return "songs.durations.not.equal.size"
}
}
我的问题来自代码的constraints属性块。
在验证者约束中,作者使用闭包。
但是“val”和“obj”到底是什么?他们会得到什么值(value)?
另外,还有一个额外的问题,“约束”是什么类型?我不认为这是一张 map ,因为它们在Groovy中被定义为[]。从Java的 Angular 来看,
x = { .. }
是一个数组,但是我不确定Groovy中的数组是否相同。谢谢您的帮助!
最佳答案
您的第一个问题val
和obj
参数分别引用属性的值和实例的指针。定制验证例程的documentation对此进行了更详细的说明。
至于奖励问题constraints
是Groovy closure。
关于grails - Grails/Groovy:了解闭包代码的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30249825/