What does .delegate mean in groovy?

后端 未结 2 835
小鲜肉
小鲜肉 2020-12-08 13:04

I found this code snippet:

def say = {println m}
say.delegate = [m:2]
say()

That apperantly prints 2. How does it work? Where can find docu

2条回答
  •  忘掉有多难
    2020-12-08 13:55

    The delegate of a closure is an object that is used to resolve references that cannot be resolved within the body of the closure itself. If your example was written like this instead:

    def say = {
      def m = 'hello'
      println m
    }
    say.delegate = [m:2]
    say()
    

    It prints 'hello', because m can be resolved within the closure. However, when m is not defined within the closure,

    def say = {
      println m
    }
    say.delegate = [m:2]
    say()
    

    the delegate is used to resolve the reference, and in this case the delegate is a Map that maps m to 2.

提交回复
热议问题