scala中else语句中的If语句?

scala中else语句中的If语句?,scala,Scala,我在下面有一个方法(注意我简化了,使问题更简单) } 问题是,即使内部if表达式返回int,包装的else也将返回单元。因此我得到: Multiple markers at this line - type mismatch; found : Unit required: Int 有什么提示吗?如果内部else语句中的If语句都不适用,则无法返回任何内容。将代码更改为如下所示,它将编译: def getMyInt(flag1: Boolean, flag2: Boolean): Int =

我在下面有一个方法(注意我简化了,使问题更简单)

}

问题是,即使内部
if
表达式返回int,包装的
else
也将返回
单元。因此我得到:

Multiple markers at this line
- type mismatch; found : Unit 
 required: Int

有什么提示吗?

如果内部else语句中的If语句都不适用,则无法返回任何内容。将代码更改为如下所示,它将编译:

def getMyInt(flag1: Boolean, flag2: Boolean): Int = if (flag1) 0
  else {
    if (flag2) 1
    else 2
  }

我更改了内部else中的第二个if语句,因为两次if-flag2没有意义。

您可以尝试将
flag1
flag2
包装到
元组中,并对其进行模式匹配

def getMyInt(flag1: Boolean, flag2: Boolean): Int = (flag1, flag2) match {
  case (true, _) => 0
  case (_, true) => 1
  //Other cases
}

此外,还可以将控制标志作为参数。Martin Fowler有一个关于重构标志参数的函数。

但是你的方法不能返回int。如果flag1和flag2都不为true怎么办?如果
if
表达式没有
else
部分,就好像你写了
if(cond)value else()
()
单位
值的文字符号)。
if
表达式的类型是其每个“边”的LUB(最具体的通用超类型)
def getMyInt(flag1: Boolean, flag2: Boolean): Int = (flag1, flag2) match {
  case (true, _) => 0
  case (_, true) => 1
  //Other cases
}