gpt4 book ai didi

Groovy 的 "optional return"语义

转载 作者:行者123 更新时间:2023-12-03 20:00:34 24 4
gpt4 key购买 nike

在 Groovy 中,return statement is optional ,允许您编写如下方法:

def add(a, b) {
a + b
}

...其中添加 ab并将结果返回给调用者。

但是,我想知道当该方法具有多个返回“语句”时的语义是什么。例如,在 Java 中,您可能有:
String append(String a, String b) {
if (a == null) {
return b;
}
return a + b;
}

这可以(假设)被翻译成 Groovy,如:
def append(a, b) {
if (! a) {
b
}
a + b
}

但是,在这种情况下,Groovy 怎么知道 b内部 if声明应该返回?或者不是?我认为 Groovy 不能简单地将结果未使用的任何语句视为 return , 正确的?在这种情况下,“可选返回”功能的行为方式是否有任何明确定义的语义?

最佳答案

您链接的页面(相当简洁)描述了确切的语义:

Notice that the return statement is optional at the end of methods.



所以 b在那 if除非您明确返回,否则永远不会返回块。实际上,这意味着返回值将是最后一条语句的评估结果,因此如果您的示例是
def append(a, b) {
if (!a) { b }
else { a + b }
}

那么结果将是 b如果 !atruea + b除此以外。

调用 void 的结果功能是 null ,所以如果这个例子是
def append(a,b) {
if (!a) { b }
else { a + b }
println "debug: $a $b"
}

然后 append总是会返回 null .

我自己的经验法则是,如果方法或闭包包含多个语句,则始终使用显式 return 语句。我认为在更复杂的方法中依赖隐式 return 语句是危险的,因为如果有人在方法的末尾添加一行,他们将更改返回值,即使他们很可能不打算这样做。

关于Groovy 的 "optional return"语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12925713/

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