什么<<在groovy意味着

时间:2015-03-13 21:47:50

标签: groovy gradle

我正在尝试阅读一些时髦的文章,并在几个背景下遇到了“双倍少于”<<。谷歌很难。它在这些例子中如何运作?

new URL('the url').withInputStream{ i -> f.withOutputStream{ it << i }}

并在Gradle:

task hello << {
  println 'Hello world!'
}

1 个答案:

答案 0 :(得分:3)

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

assert (1<<4)==16

但是Groovy允许overloading operators,在提到的例子中,它是手段,它被重载了什么(使用方法a.leftShift(b))。就像在C ++中一样,它通常用于发出信号&#34;追加&#34;操作(例如std::cout << "Hello World" << std::endl)。

在上面的例子中,它意味着&#34;追加流&#34; (参见https://github.com/groovy/groovy-core/blob/GROOVY_2_4_X/src/main/org/codehaus/groovy/runtime/IOGroovyMethods.java#L113)或&#34;将此功能/闭包添加到任务&#34; (见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)。

如果你想将它用于自己的,你基本上可以用它做任意的事情。在以下示例中,#34;将{5}添加到cnt&#34;

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

def x = new X()
x << "lol"
assert x.cnt == 5

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