gpt4 book ai didi

scala - 返回 Scala

转载 作者:行者123 更新时间:2023-12-03 05:22:30 28 4
gpt4 key购买 nike

我是一名 Scala 程序员新手,遇到了一个奇怪的行为。

def balanceMain(elem: List[Char]): Boolean =
{
if (elem.isEmpty)
if (count == 0)
true;
else false;

if (elem.head == '(')
balanceMain(elem.tail, open, count + 1);....

基本上,如果 elem.isEmptycount == 0,我想返回 true。否则,我想返回 false。

现在我在上面读到不需要在 scala 中添加 return 语句。所以我省略了上面的return。但它不返回 bool 值。如果我添加一个 return 语句作为 return true。它工作得很好。为什么会这样?

另外,为什么在 scala 中使用 return 语句被认为是一种不好的做法

最佳答案

这并不只是省略 return 关键字那么简单。在 Scala 中,如果没有返回值,则最后一个表达式将被视为返回值。因此,如果最后一个表达式是您想要返回的内容,那么您可以省略 return 关键字。但如果您想要返回的不是最后一个表达式,那么 Scala 将不知道您想要返回它

一个例子:

def f() = {
if (something)
"A"
else
"B"
}

此处函数 f 的最后一个表达式是一个计算结果为字符串的 if/else 表达式。由于没有明确的 return 标记,Scala 会推断您想要返回此 if/else 表达式的结果:一个字符串。

现在,如果我们在 if/else 表达式之后添加一些内容:

def f() = {
if (something)
"A"
else
"B"

if (somethingElse)
1
else
2
}

现在最后一个表达式是一个计算结果为 Int 的 if/else 表达式。因此f的返回类型将为Int。如果我们真的希望它返回字符串,那么我们就会遇到麻烦,因为 Scala 不知道这就是我们的意图。因此,我们必须通过将字符串存储到变量并在第二个 if/else 表达式之后返回它,或者更改顺序以使字符串部分最后发生来修复它。

最后,即使使用像您这样的嵌套 if-else 表达式,我们也可以避免使用 return 关键字:

def f() = {
if(somethingFirst) {
if (something) // Last expression of `if` returns a String
"A"
else
"B"
}
else {
if (somethingElse)
1
else
2

"C" // Last expression of `else` returns a String
}

}

关于scala - 返回 Scala,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12560463/

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