我在 Grails 中为 Map of Lists (其中 key
是一个 Integer
但 values
是 List
的 map )添加了一个行为。如果 key
不存在,我将插入 Integer
key
和一个 value
。但是如果 key
存在,我想将 values
连接为 List
/而不是替换现有的 value
。
/**
* E.g.
* [1: [123, 456, 789], [2: [987, 654, 321]]]
*/
LinkedHashMap.metaClass.multiPut << { key, value ->
delegate[key] = delegate[key] ?: [];
delegate[key] += value
}
我的问题是:
我应该把它放在 Grails 的什么地方? 在
Bootstrap.groovy's init
或作为 AST Transformation
(如果是,如何?)?
最佳答案
我个人会选择 Groovy 扩展模块。这些是在 Grails 初始化阶段加载的,因此几乎可以在应用程序生命周期内的任何时间使用。
更多关于这些扩展的信息可以在这里找到:http://mrhaki.blogspot.cz/2013/01/groovy-goodness-adding-extra-methods.html
根据此 Jira 票证,已将模块加载支持添加到 Grails:https://github.com/grails/grails-core/issues/1307
另一方面,我也没有看到使用 Bootstrap 有什么问题。
关于grails - Grails 中的 Groovy 元类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30912218/