“使用”如何在groovy中工作?

时间:2011-03-26 15:34:57

标签: groovy

您好我有以下代码片段;

class StringCalci
{
        static def plus(Integer self, Integer Operand)
        {
                return self.toInteger() * Operand.toInteger()
        }
}
use (StringCalci)
{
        println("inside the Use method!")
        println( 12 + 3 )
}
println(12+3)

我很震惊地看到Use在groovy中的使用。问题是我可以在运行时向我的方法添加方法(我自己的方法)。当我看到上面的代码时,我在思考Groovy如何使这样的事情成为可能!在println中使用Use会将两个给定的数字相乘(因为我已覆盖plus方法),而外部println会添加它!我的问题是Groovy如何识别printlnUse之外的println执行UseUse是关键字/方法吗?我需要了解这个过程的幕后..请让我知道:) 在此先感谢:)

1 个答案:

答案 0 :(得分:5)

欢迎来到动态语言的精彩世界,凡一切皆有可能,无所谓!

此功能称为Categories。至于实施:

  • use实际上不是关键字,而是Groovy运行时adds to the Object class的一种方法,它可以在任何地方使用。
  • 我认为功能主要在课程GroovyCategorySupport
  • 中实现
  • 从Javadoc判断,它基于在ThreadLocal中保留覆盖方法的映射,然后为每个方法调用查询。
  • 是的,这对于性能来说并不是那么好,但Groovy和类似语言提供的几乎所有动态“神奇”功能都是如此(并且有很多这些功能)。