grails - 在 Grails 中 ServletContext 之后的这个运算符是什么?

标签 grails

我是 Groovy/Grails 和 Java 的新手。

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

class BootStrap { 
 def init = { servletContext -> 

 } 

 def destroy = {} 
} 

我确实了解 servletContext 是从其他地方阅读的内容,但我无法弄清楚 servletContext 之后的取消引用 like operator -> 是什么?任何帮助表示赞赏。

最佳答案

想想def喜欢 var在 Javascript 和 Object在Java中;这就是设置变量 init{ servletContext -> } (为了清楚起见,把它放在一行上)。

那是一个闭包,你可以将它们与其他表达式区分开来,因为它们是 { } 中的代码块。 block ,具有 3 种 arg 签名形式之一。如果没有定义 args(就像下面的 destroy 闭包),那么实际上有一个名为 it 的 args .就像 i在传统的 for 循环中 - 您可以使用复杂的名称,但如果没关系,it和任何一样好。它是由编译器自动生成的,如果你想命名它,你可以没有it将存在。

如果有一个或多个明确命名的参数,则没有自动 it ,并且您需要在 args block 和代码开头之间有一个分隔符 - 这就是 ->确实,并且要求所有东西都在一条线上(需要的地方)还是在多条线上,理论上在较小的本地商店

最后,如果真的有零个参数,例如就像一个简单的 getter int getFoo() { ... } 的闭包等价物然后你可以随意命名并添加->运算符以明确没有参数(甚至 it ):def fooGetter = { -> ... }

关于grails - 在 Grails 中 ServletContext 之后的这个运算符是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26435630/

相关文章:

Grails 复选框

search - B树适合自动建议/自动完成Web表单吗?

spring - Grails GSP标签字段值格式

grails - Grails 3.2.9,application.yml中的Spring Security

grails - 重写 Grails 内置库?

grails - 每秒HTTP 500响应

hibernate - 如何在 Grails 中持久保存数据库中的闭包?

spring - Grails安全插件:在哪里存储其他用户数据?

grails - 如何使用Grails Quartz2插件在指定时间设置一次性工作触发器

json - 使用Groovy替换JSON中的数字变量