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
}