gpt4 book ai didi

scala - 没有else的scala if语句的返回类型是什么

转载 作者:行者123 更新时间:2023-12-04 06:12:49 24 4
gpt4 key购买 nike

我在一些 Scala 代码中犯了类似于以下的错误:

val someVal:String = if (someX == someY) n

回想起来,这个错误对我来说很清楚(它必须为 someVal 分配一些东西,如果表达式为假,它可能不会是一个字符串)。我想知道如果表达式为假,返回的值是什么。我最好的猜测是 Unit,或者 AnyVal。

最佳答案

该代码将无法编译,因为对于 someVal要成为一个字符串,那么每个执行路径(ifelse )都必须返回一个字符串。但是,由于您没有 else ,这是不可能的,因此不会编译。

编译器错误将如下所示,这表明您正在返回 Unit当你应该返回 String :

error: type mismatch;
found : Unit
required: String

那是因为你所拥有的等同于:
val someVal: String = if (foo == bar) "Hello World" else ()
()Unit 的唯一值,这不是 String 类型的有效值。

将来您可以使用 Scala repl 并让它告诉您类型(只是不要指定一个):
scala> val someVal1 = if (true) "Hello World" 
someVal1: Any = Hello World

val someVal2 = if (false) "Hello World"
someVal2: Any = ()

如您所见,类型为 Any因为那是 Unit 之间唯一的共同父节点和 String :

Class Hierarchy

关于scala - 没有else的scala if语句的返回类型是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45619279/

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