"使用"如何在groovy中工作?

Ant*_*t's 2 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)
Run Code Online (Sandbox Code Playgroud)

看到Usegroovy 的使用让我感到震惊.问题是我可以在运行时向我的方法添加方法(我自己的方法).当我看到上面的代码时,我在思考Groovy如何使这样的事情成为可能!println内部的使用Use是乘以两个给定的数字(因为我有覆盖plus方法),在外面println添加它!我的问题是如何的Groovy承认println在执行Useprintln外面的Use.是Use关键字/方法吗?我需要了解这个过程的幕后..请让我知道:)在先谢谢:)

Mic*_*rdt 5

欢迎来到动态语言的精彩世界,一切皆有可能,没有什么是确定的!

此功能称为类别.至于实施:

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