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

标签 grails groovy

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

谢谢您的帮助!

最佳答案

您的第一个问题valobj参数分别引用属性的值和实例的指针。定制验证例程的documentation对此进行了更详细的说明。

至于奖励问题constraints是Groovy closure

关于grails - Grails/Groovy:了解闭包代码的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30249825/

相关文章:

chalice 。调用保存后id为空

grails - 通过字段名获取字段并为其设置值

xml - 根据 XSD 模式验证 XML 并使用 groovy 捕获验证器期望

sorting - Jenkins Pipelines 中的列表就地排序

json - 使用条件运算符在 Grails 中渲染 'as JSON' 无法正确渲染

groovy - Groovy Abstract ConcurrentMap 中的错误?

facebook - grails spring-security-oauth-facebook:0.2

grails - 在 Grails Spring Security 身份验证期间获取 Principal

google-chrome - 无法在 Google Chrome 中但在 IE10 中播放来自 Grails 网络应用程序的文件(音乐、照片等)

unit-testing - Grails 1.3.3:未填充controller.redirectArgs.action