我有一个方法(注意我已简化以使问题更简单)
def getMyInt(flag1: Boolean, flag2: Boolean): Int = {
if (flag1) 0;
else {
if (flag2) 1;
if (flag2) 2;
}
}
问题是即使内部if
表达式返回Ints,包装的else
也会返回Unit
。因此我得到了:
Multiple markers at this line
- type mismatch; found : Unit
required: Int
任何提示?
答案 0 :(得分:8)
您可以尝试在flag1
中包装flag2
和Tuple
,并在其上进行模式匹配。
def getMyInt(flag1: Boolean, flag2: Boolean): Int = (flag1, flag2) match {
case (true, _) => 0
case (_, true) => 1
//Other cases
}
此外,控制标志为参数smell funny。 Martin Fowler在重构标志参数上有article。
答案 1 :(得分:3)
如果内部else语句中的if语句都不适用,则不能返回任何内容。将代码更改为如下,它将编译:
def getMyInt(flag1: Boolean, flag2: Boolean): Int = if (flag1) 0
else {
if (flag2) 1
else 2
}
我更改了内部else中的第二个if语句,因为如果flag2没有意义,则会两次。