我在Groovy中阅读了use
个关键字。但是,由于它已被完全使用,所以无法提出。我也有类别类,在这个主题下,那也是什么?来自,Groovy In Action
class StringCalculationCategory {
static def plus(String self, String operand) {
try {
return self.toInteger() + operand.toInteger()
} catch (NumberFormatException fallback) {
return (self << operand).toString()
}
}
}
use (StringCalculationCategory) {
assert 1 == '1' + '0'
assert 2 == '1' + '1'
assert 'x1' == 'x' + '1'
}
使用上面的代码,任何人都可以说groovy中use
关键字的用途是什么?以及上面的代码是做什么的?
答案 0 :(得分:20)
请参阅Pimp My Library Pattern了解use
的内容。
在您的情况下,它会使String.add(something)
运算符超载。如果两个字符串都可以用作整数(toInteger()
不会抛出异常),则返回这两个数字的总和,否则返回字符串的串联。
答案 1 :(得分:13)
use 非常有用。
顺便说一下,Dustin Marx的博客中的this post 受实际事件的启发指出:
使用“关键字”实际上不是关键字,而是一种方法 Groovy的Object类的GDK扩展,通过提供 Object.use(Category,Closure)。还有很多其他方法 在Groovy GDK对象上提供,可以方便地访问 功能,可能看起来像语言关键字或功能 因为他们不需要对象的名称来继续它们。我不喜欢 使用这些名称在我的Groovy脚本中使用变量(例如, println和sleep)以避免潜在的可读性问题。
还有其他类似的“关键字”实际上是Object类的方法,例如 with 。 Groovy JDK documentation列出了这些方法。
答案 2 :(得分:1)
groovy.time.TimeCategory
是一个很好的例子。与use()
一起使用时,它可以使日期/时间声明非常清晰易读。
示例:
use (TimeCategory) {
final now = new Date()
final threeMonthsAgo = now - 3.months
final nextWeek = now + 1.week
}