为什么我们在g中使用闭包:select optionvalue

Vis*_*swa 3 grails groovy closures

我能理解什么是闭包.我可以理解下面的例子.

    def list = ['a','b','c','d']
    def newList = []

    def clos = { it.toUpperCase() }
    list.collect( newList, clos )

assert newList == ["A", "B", "C", "D"]  
Run Code Online (Sandbox Code Playgroud)

我去看了g:选择文档.我在下面看到了.

 <g:select optionKey="id" optionValue="${{it.title?.toUpperCase()}}" name="book.title" from="${bookList}" />
Run Code Online (Sandbox Code Playgroud)

我不明白$ {{it.title?.toUpperCase()}}.

我理解每个对象标题转换为大写的逻辑,但为什么我们需要双"{}"..

为什么使用$ {it.title?.toUpperCase()}无效

文档链接在此输入链接描述

Fab*_*oli 5

外部$ {}不是闭包,是GSP表达式,只有内部{}是闭包.如果只放入$ {it.title?.toUpperCase()},则不会将参数传递给闭包,而是传递实际的"it.title?.toUpperCase()"解析值.