我是Grails / Groovy的新手,所以当我尝试理解我在书中遇到的一段代码时,请耐心等待。
这是一个简单的专辑域类:
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"
}
}
我的问题来自约束属性代码块 在验证器约束中,作者使用闭包 但到底是什么" val"和" obj"?它们会给出什么价值?
另外,一个奖金问题,是什么类型"约束"?我不认为它是一张地图,因为它们在Groovy中被定义为[]。从Java的角度来看,x = { .. }
是一个数组,但我不确定它在Groovy中是否相同。
感谢您的帮助!
答案 0 :(得分:1)
您的第一个问题,val
和obj
参数分别引用属性的值和指向实例的指针。自定义验证例程的documentation更详细地解释了这一点。
至于奖励问题constraints
是一个Groovy closure。