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

标签 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"]  

我去看了 g:select 文档。我在下面看到了。

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

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

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

为什么它不能使用 ${it.title?.toUpperCase()}

文档链接 enter link description here

最佳答案

外面的 ${ } 不是闭包,是一个 GSP Expression ,只有内部 {} 是闭包。如果您只输入 ${it.title?.toUpperCase()},您不会将参数传递给闭包,而是传递实际的“it.title?.toUpperCase()”解析值。

关于grails - 为什么我们在 g :select optionvalue 中使用闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12295820/

相关文章:

grails - 定义函数的两种类型有什么区别

java - 使用 Groovy 对我的 session bean 进行 RMI 调用

java - 无法捕获任务 ':compileGroovy' 的输入文件指纹

javascript - 为无父本地变量 : impossible? 定义 Setter/Getter

swift 4 : Cannot assign value of type '(_) -> Void' to type '(() -> ())?'

grails - 多个联接的排序问题

java - 如果无法解析属性,带有@Value Annotation 的 Grails 3 不会返回 null

grails - ElasticSearch 过滤器未返回结果...语法问题?

java - Groovy 用可能的字符串分割字符串

Swift 关闭错误