“怎么做?”;使用「;在groovy工作?

“怎么做?”;使用「;在groovy工作?,groovy,Groovy,嗨,我有下面的代码片段 class StringCalci { static def plus(Integer self, Integer Operand) { return self.toInteger() * Operand.toInteger() } } use (StringCalci) { println("inside the Use method!") println(

嗨,我有下面的代码片段

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中的使用,我感到震惊。问题是我可以在运行时向类添加方法(我自己的方法)!在
use
中使用
println
是将两个给定的数字相乘(因为我已经覆盖了
plus
方法),其中作为外部
println
的加法!我的问题是Groovy如何识别在
Use
中执行的
println
以及
Use
之外执行的
println
Use
是关键字/方法吗?我需要了解这个过程的幕后情况。。请让我知道:)
提前感谢:)

欢迎来到动态语言的奇妙世界,在这里一切皆有可能,没有什么是确定的

此功能称为。至于实施:

  • use
    实际上不是一个关键字,而是Groovy运行时使用的一种方法,它使它在任何地方都可用
  • 我认为功能主要是在类中实现的
  • 从Javadoc判断,它基于在
    ThreadLocal
    中保留重写方法的映射,然后为每个方法调用查询该映射
  • 是的,这对性能来说不是很好,但是Groovy和类似语言提供的几乎所有动态“神奇”特性也是如此(而且有很多)
我不知道任何Groovy,但从它的外观来看,
println
甚至没有被触动-只有
+
被重载。@Delnam:ya加号被重载了。。但是我想知道
如何使用
使这成为可能!您是否考虑过阅读文档?@Micheal:谢谢您的回复:)答案在
ThreadLocal
中,现在将搜索此文档了解更多信息:)@Micheal:从您的答案来看,
ThreadLocal
是java语言(一种静态类的功能,其中每个线程都有一个编号)groovy在哪些方面利用了它,为了实现
使用
,我说的对吗?@Aussies:听起来不错。但是请注意,我实际上只是在猜测如何实现它,因为GroovyCategorySupport的javadoc提到了“本地线程上下文”。