gpt4 book ai didi

groovy - Groovy 中的大括号语法是什么意思?

转载 作者:行者123 更新时间:2023-12-02 06:41:07 28 4
gpt4 key购买 nike

这个语法在 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 的基类预定义的?

后面的=(等号)是什么?它是赋值运算符吗?

= 右侧是什么?这是一个关闭吗?或者如果这是一个匿名类?或者这些是否相同?

大括号内的submit是什么?

这是一个变量吗?为什么后面没有赋值运算符呢?

这是一个函数定义吗?我可以在 Groovy 中的任意位置定义函数吗?如果这是一个函数定义,那么错误是什么?

submit 是一个函数调用,接收 { $('input[type=submit]') } 作为参数吗?如果是的话,那么这个函数在哪里定义呢?例如,MyVeryStrangeForm 定义在哪里(无处)?

如果这是函数调用,那么它将无法工作,因为它未定义......

最佳答案

快速回答所有问题:它是一个代码块,就像匿名函数一样,在 Groovy 中称为闭包

参见http://www.groovy-lang.org/closures.html

在 Groovy 中,您可以引用/传递/设置此类闭包,就像在任何函数式语言中一样。

所以这个:

static at = { assert title == 'Messages : Create'; true }

意味着类字段at将被设置为此闭包(注意,不是闭包执行的结果,而是闭包本身,作为代码块)。 at 的类型被省略,但它可以是 static def atstatic Object at,或 static Closure at

此代码可以在以后随时在不同的上下文中执行,并定义 title 等。

这个:

submit { $('input[type=submit]') }

表示以闭包作为参数调用函数submit

如果你想编写这样的自己的函数,它应该是这样的:

def submit(Closure code) {
code.call()
}

括号可以省略,因此可以写成 submit({$('input[type=submit]')})。对于其他函数也是如此,它可以是 println 'hello world!' 而不是 println('hello world')。

还有一种常见的做法是将闭包定义为最后一个参数,例如:

def errors(Map opts, Closure code) {
....
}

在这种情况下,您可以像往常一样传递第一个参数,将其括在括号中,并在外部关闭:

errors(required:false) { ...... }

同:

errors([required: false], { ..... })

关于groovy - Groovy 中的大括号语法是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34659385/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com