如果语句Scala行为异常

如果 Scala 中的语句表现异常

scala> val a = 10
a: Int = 10

scala> if (a > 10) 1
res10: AnyVal = ()

scala> if (a <= 10) 1
res12: AnyVal = 1

为什么我们没有得到 Int 的返回类型?为什么我们得到 AnyVal

回答

如果 Scala 中的语句表现异常

Scala 没有if statement。事实上,Scala有没有报表在所有。Scala 有一个if 表达式,或者更准确地说,是一个条件表达式

事实上,如果Scala一个if语句,那么你的问题就没有意义,因为语句没有价值,因此没有类型。

为什么我们没有得到 Int 的返回类型?为什么我们得到 AnyVal

正如文档所说:

条件表达式if (ë 1) ë 2 else ë 3分选的值中的一个ë 2ë 3取决于的值,ê 1。[…] 条件表达式的类型是e 2e 3类型的弱最小上限。

这是有道理的:条件可以是真或假,所以条件表达式的值要么是“then”部分,要么是else部分。由于值可以是“then”部分或else部分,因此表达式的类型显然必须与两者兼容。

在你的情况下,“那么”部分的价值是1其类型是Int与价值else的部分是()它的类型是Unit

条件表达式的简短形式消除了 else 部分。条件表达式if (e 1) e 2被评估为好像它是if (e 1) e 2 else ()

因此,无论整个表达式的类型是什么,它都必须与Int和兼容Unit。而最精确的可能的类型,它是兼容两者IntUnitAnyVal:[来源:Scala 2.13 语言规范 - 第 12 节Scala 标准库]

正如你可以在树的左半边看到,弱,LUBIntUnit明显AnyVal

  • What a long way to say "you need an `else`" 😀
  • "Scala has no statements at all."... well, this assertion is not very accurate. At least according to the Scala Spec -> https://www.scala-lang.org/files/archive/spec/2.11/06-expressions.html#statements

以上是如果语句Scala行为异常的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>