2014-10-18 44 views
0

我是一名Groovy/Grails和Java的新手。Grails中的ServletContext之后的运算符是什么?

我一直在关注Grails的Bootstrap类中的一些代码示例,并偶然发现了一段代码,如下所示。

class BootStrap { 
def init = { servletContext -> 

} 

def destroy = {} 
} 

我明白了servletContext是阅读别处什么,但我无法弄清楚什么样的运营商提领 - >后ServletContext的是?任何帮助赞赏。

回答

2

想像一下def就像使用Javascript的var和使用Java的Object一样;因此将变量init设置为{ servletContext -> }(为了清楚起见,将它放在一行上)。

这是一个闭包,您可以从其他表达式中告诉它们,因为它们是{ }块内的代码块,具有3种形式的arg签名之一。如果没有定义参数(如下面的destroy闭包),那么实际上有一个名为it的参数。这就像传统的for循环中的i--你可以使用一个精心设计的名字,但是如果它没有关系,it就和任何一个一样好。它由编译器自动生成,如果你想命名它,你可以并且不存在it

如果有一个或多个明确命名指定参数时,那么就没有自动it,和你需要的参数块和代码的开始之间的分隔符 - 这就是->确实和它的所需的一切是否是在同一行(需要的地方)或多条线路,理论上在较小的本地商店

最后,如果确实存在零参数,例如像封闭相当于一个简单的吸气剂int getFoo() { ... },只要你喜欢,然后你的名字,并添加->运营商明确表示有无参数(甚至没有it):def fooGetter = { -> ... }

+0

我现在意识到我需要了解在关闭Groovy为了掌握这个概念。感谢您的回应。闭包接受多于一个参数吗?例如。 'def foo = {arg1,arg2 - > ...'' – katboo 2014-10-18 07:13:53

+0

是的,他们当然可以。在codehaus网站上有很多非常有用的groovy教程。 [这一个](http://groovy.codehaus.org/Closures)可能是一个有用的,你有一个通读。 – rcgeorge23 2014-10-18 11:13:27