groovy - <<在groovy中是什么意思

标签 groovy gradle

<分区>

我正在尝试阅读一些常规内容并遇到“双小于”<<在一些情况下。很难用谷歌搜索。它在这些示例中是如何工作的?

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

在 Gradle 中:

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

最佳答案

在常规 Java 中(以及几乎任何其他地方),它表示数字的按位左移:

assert (1<<4)==16

但是 Groovy 允许 overloading operators在提到的示例中,它是指重载的内容(使用方法 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 )。

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

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

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

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

关于groovy - <<在groovy中是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29042528/

相关文章:

file - 某些行(虚线)使用 Groovy(Grails) 写入文件失败

gradle - 如何从 gradle 启动 npm build

java - 在 Android studio 中使用 Jcenter 和 gradle

java - 无法从 ReactiveCouchbaseRepository 中删除项目

grails - 如何在Grails Controller 中创建动态单选按钮

Jenkins 使用 groovy 更新生成器 shell 命令

android - 错误 ':app:packageAllDebugClassesForMultiDex'。 > java.util.zip.ZipException : duplicate entry:

react-native - 第一个 React Native App : Task :app:processDebugMainManifest FAILED

java - 如何测试使用 JAR 的 Java 代码?

Jenkins 抛出序列化异常