大括号语法在Groovy中意味着什么?
这个语法在Groovy中意味着什么?
class CreateMessagePage extends Page { static at = { assert title == 'Messages : Create'; true } static url = 'messages/form' static content = { submit { $('input[type=submit]') } MyVeryStrangeForm { $('form') } errors(required:false) { $('label.error,.alert-error')?.text() } } } (摘自Spring MVC Test HtmlUnit manual) 问题是关于Groovy,我想用Groovy的术语知道答案. 什么是内容?它是静态变量吗?它的名称是随机的还是由Page的基类预定义的? 它之后是什么=(等号)?它是一个赋值运算符吗? 在=的右边是什么?这是封闭吗?或者如果这是一个匿名类?或者如果这些是相同的? 什么是花括号内提交? 这是变量吗?为什么之后没有赋值运算符呢? 这是一个函数定义吗?我可以在Groovy中的任意位置定义函数吗?如果这是一个函数定义,那么什么是错误呢? submit是一个函数调用,接收{$(‘input [type = submit]’)}作为参数吗?如果是,那么可以定义此功能的位置?例如,MyVeryStrangeForm定义在哪里(无处)? 如果这是函数调用,那么它将无法工作,因为它未定义… 解决方法
快速回答所有问题:它是一个代码块,如匿名函数,在Groovy中称为闭包.
见http://www.groovy-lang.org/closures.html 在Groovy中,您可以引用/传递/设置此类闭包,就像在任何功能语言中一样. 所以这: static at = { assert title == 'Messages : Create'; true } 表示将字段at设置为此闭包(通知,不是闭包执行的结果,而是闭包本身,作为代码块).在那里省略了at的类型,但它可以是静态def at或静态Object at,或静态Closure at 此代码可以在以后的任何时间执行,在不同的上下文中,定义标题等. 这个: submit { $('input[type=submit]') } 表示使用closure作为参数调用函数submit. 如果你想编写这样的自己的函数,它应该是这样的: def submit(Closure code) { code.call() } 括号可以省略,因此可以写为submit({$(‘input [type = submit]’)}).对于其他功能也一样,它可能是println’hello world!’而不是println(‘你好世界). 将闭包定义为最后一个参数也是一种常见做法,例如: def errors(Map opts,Closure code) { .... } 在这种情况下,你可以像往常一样传递第一个参数,用括号括起来,然后在外面关闭: errors(required:false) { ...... } 和…一样: errors([required: false],{ ..... }) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |