<< 在 groovy 中是什么意思

Sha*_*ron 3 groovy gradle

我正在尝试阅读一些 groovy 并<<在几个上下文中遇到“双小于” 。谷歌很难。在这些例子中它是如何工作的?

new URL('the url').withInputStream{ i -> f.withOutputStream{ it << i }}
Run Code Online (Sandbox Code Playgroud)

在 Gradle 中:

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

cfr*_*ick 5

在常规 Java(以及几乎其他任何地方)中,这意味着数字按位左移:

assert (1<<4)==16
Run Code Online (Sandbox Code Playgroud)

但是 Groovy 允许重载运算符,并且在提到的示例中,它是指重载的内容(方法的使用a.leftShift(b))。就像在 C++ 中一样,它通常用于表示“追加”操作(例如std::cout << "Hello World" << std::endl)。

在上面的例子中,它的意思是“附加流”(参见https://github.com/groovy/groovy-core/blob/GROOVY_2_4_X/src/main/org/codehaus/groovy/runtime/IOGroovyMethods.java#L113)或“将此功能/闭包添加到任务中”(参见https://github.com/gradle/gradle/blob/RB_2.0/subprojects/core/src/main/groovy/org/gradle/api/internal/AbstractTask。 java#L460)。

还有例如<<将项目附加到常规列表(例如def list = []; list << 42)。

如果你想自己使用它,你基本上可以用它做任何事情。在下面的例子中“加五到cnt

class X {
    def cnt = 0
    def leftShift(x) {
        cnt += 5
    }
}

def x = new X()
x << "lol"
assert x.cnt == 5
Run Code Online (Sandbox Code Playgroud)

是聪明吗?也许不吧。您很可能会添加功能,这是经常需要的并且对操作员有意义。并注意<<运算符的优先级!