Scala中的if-else语句是否总是需要一个else?

Scala中的if-else语句是否总是需要一个else?,scala,Scala,我有以下功能,工作正常: def power(x: Double, n: Int) : Double = { if (n > 0 && n % 2 == 0) power(x, n/2) * power(x, n/2) else if (n > 0 && n % 2 == 1) x * power(x, n-1) else if (n < 0) 1 / power(x, -n) else 1 } 我猜这是因为存在一种可能的单位返

我有以下功能,工作正常:

def power(x: Double, n: Int) : Double = {
  if (n > 0 && n % 2 == 0) power(x, n/2) * power(x, n/2)
  else if (n > 0 && n % 2 == 1) x * power(x, n-1)
  else if (n < 0) 1 / power(x, -n)
  else 1
}
我猜这是因为存在一种可能的单位返回类型,因为
n
的值不能满足任何条件?

在Java中,“if else”是一个语句。在Scala中,它是一个表达式(想想Java的三元
?:
),这意味着它总是产生一些值。正如som snytt在注释中提到的,如果缺少
else
块,编译器将提供
else()
,它属于
Unit
,显然与示例中预期的
Double
类型冲突

还提供了一些缺少
else
的有效示例。

在Java中,“if-else”是一个语句。在Scala中,它是一个表达式(想想Java的三元
?:
),这意味着它总是产生一些值。正如som snytt在注释中提到的,如果缺少
else
块,编译器将提供
else()
,它属于
Unit
,显然与示例中预期的
Double
类型冲突


提供了缺少
else
的一些有效示例。

否-一般来说,
if
表达式不需要
else
子句

示例:

if (true) println("a")
// prints "a"

if (false) println("a") else if (true) println("b")
// prints "b"

但是,正如Nikita Volkov的回答所说,如果需要表达式具有除
单元

否之外的其他类型,则有必要使用
if
表达式-一般来说,
if
表达式不需要
else
子句

示例:

if (true) println("a")
// prints "a"

if (false) println("a") else if (true) println("b")
// prints "b"

但是,正如Nikita Volkov的回答所说,如果您需要表达式具有除
单元

以外的某种类型,那么您的猜测是正确的,这是必要的。该方法必须返回一个Double,如果“if..”案例中的任何一个不匹配,您将返回Unit。实际上,当您将第二个定义粘贴到repl中时,您应该

:11:错误:类型不匹配

找到:单位

必填项:双倍


你的猜测是正确的。该方法必须返回一个Double,如果“if..”案例中的任何一个不匹配,您将返回Unit。实际上,当您将第二个定义粘贴到repl中时,您应该

:11:错误:类型不匹配

找到:单位

必填项:双倍

可能的重复可能的重复
if (true) println("a")
// prints "a"

if (false) println("a") else if (true) println("b")
// prints "b"