【发布时间】:2011-09-21 04:36:48
【问题描述】:
我将这一行插入到我的 BootStrap 类的 init() 中
Integer.metaClass.minutes = { 60000L * delegate }
然后我无法从 Job 类(Quartz 插件)中使用它。我是否将这行代码放在其他地方以使其成为全局修改?
我还想知道在 Grails 的所有类中使用函数的最佳方法。 就像一个全局函数。是扩展 Object 元类吗?还是有更好的方法?
【问题讨论】:
-
您可以使用已经存在的:
def time = use( TimeCategory ) { 10.minutes.toMilliseconds() }... 虽然这不能回答您的问题 ;-) -
非常酷。你能解释一下 use 和 TimeCategory 的东西吗?最好的参考?很棒的评论 +1
-
@tyndall
TimeCategory是一个 GroovyCategory。use函数可以被认为是一种临时向类添加功能的方法,因此在use(){ ... }块内,类别生效,整数使用基于时间的属性进行修饰。类似于向metaClass添加方法,但更加本地化。 -
注意:在 groovy 1.8 中,
TimeCategory已移至groovy.time.*包,在 Grails 开始使用它之前不会影响到它(v1.4?) -
@tim_yates 实际上,TimeCategory 存在于 groovy 1.7 中的新位置。即使使用 grails 1.3,它也应该从那里导入。
标签: grails groovy metaprogramming metaclass