Gradle任务中doLast和leftShift之间的区别?

Ver*_*env 5 groovy gradle

我知道传递配置闭包和为任务定义操作之间的区别.我相信你不能<<在配置闭包中使用,因为它似乎是一个语法错误:

task wrong {
  << { println "From doLast" }
}
Run Code Online (Sandbox Code Playgroud)

但.为什么我不能用leftShift作为等同<<于上述配置关闭?在一个更加清晰的测试用例中,为什么以下的buildfile不输出该行From leftShift - inside

defaultTasks 'tryout'

task tryout {
  doLast { println "From doLast" }
  leftShift { println "From leftShift - inside" }
}

tryout.leftShift { println "From leftShift - outside" }
Run Code Online (Sandbox Code Playgroud)

当然,这不是一个真正的问题,因为我可以简单地使用doLast.我只是想扩大我对Gradle的理解.谢谢!

RaG*_*aGe 10

<<当与任务定义一起使用时,在按位意义上并不是真正的leftshift.这是简写doLast.在gradle DSL中:

task hello << {
    println 'Hello world!'
}
Run Code Online (Sandbox Code Playgroud)

与以下内容完全相同:

task hello {
    doLast{
        println 'Hello world!'
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 因为你可以在groovy中重载运算符 (2认同)