2014-10-18 27 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