使用“it”的Groovy嵌套闭包的问题?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (72)

闭包中的代码可以引用it变量。

8.times { println it }

def mywith(Closure closure) {
   closure()
}

mywith { println it }

考虑到此行为,不能期望下面的代码会打印出来0011

2.times {
   println it 

   mywith {
      println it
   }
}

相反,我不得不写

2.times { i ->
   println i 

   mywith {
      println i
   }
}
提问于
用户回答回答于

Groovy:

闭包可能有1...N个参数,可以是静态类型的,也可以是非类型的。如果没有显式参数,第一个参数可以通过一个名为它的隐式非类型化参数获得。如果调用方不指定任何参数,则第一个参数(扩展为它)将为空。

用户回答回答于

如果像这样定义一个闭包

def closure = {println "i am a closure"}

它似乎没有参数,但实际上它有一个名为it...。这一点得到了以下方面的证实:

def closure = {println "i am a closure with arg $it"}
closure("foo")

所属标签

可能回答问题的人

  • 西风

    renzha.net · 站长 (已认证)

    7 粉丝1 提问9 回答
  • 四无君

    0 粉丝0 提问3 回答
  • HKC

    红客学院 · 创始人 (已认证)

    26 粉丝7 提问2 回答
  • o o

    3 粉丝490 提问2 回答

扫码关注云+社区

领取腾讯云代金券