gpt4 book ai didi

groovy - Groovy 的 'name : expression' 语法的不同行为

转载 作者:行者123 更新时间:2023-12-01 11:14:39 24 4
gpt4 key购买 nike

我让自己熟悉了 groovy,并对以下代码运行感到有点惊讶:

class Main {
static void main(String[] args) {
abc : 1
}
}

什么是 abc : 1 ?我认为它可能是一个 map ,如下代码:

class Main {

static void main(String[] args) {
print(abc : 1)
}

}

导致 [abc:1] 被打印到控制台,但是

class Main {

static void main(String[] args) {
def map = abc : 1
}

}

编译不了!!!但最令人困惑的部分是将表达式包装到闭包中

class Main {

static void main(String[] args) {
def closure = {-> abc : 1}
print closure()
}

}

导致 1 被打印到控制台而不是 [abc:1]。有没有我不知道的冒号的用法?

最佳答案

您的示例中有 2 种不同的使用上下文。

1。命名参数

在第一个示例中,您使用了 Groovy's named parameters .以下 Groovy 代码:

print(abc: 1)

相当于

print([abc: 1])

Groovy 使用映射来表示命名参数,并且此构造仅在方法调用中可用。这就是为什么当您尝试将 abc : 1 分配给变量时,编译因错误而失败。

2。标签语句

第二个使用闭包的例子是 labeled statement 的例子.如果你格式化你的代码,它看起来像这样:

def closure = { ->
abc:
return 1 // return is optional of course in this case. I added it to make the example more explicit
}

print closure() // prints 1

请记住,标签对代码的语义没有影响,这就是返回 1 的原因。标签存在于抽象语法树中,它们可用于操作代码(例如,Spock 框架使用诸如 givenwhenthen 之类的标签将特定行为添加到测试中)。

关于groovy - Groovy 的 'name : expression' 语法的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54052379/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com