Grails / Groovy:了解闭包代码的参数

时间:2015-05-15 00:50:23

标签: grails groovy

我是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中是否相同。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您的第一个问题,valobj参数分别引用属性的值和指向实例的指针。自定义验证例程的documentation更详细地解释了这一点。

至于奖励问题constraints是一个Groovy closure