如果在scala中的else语句中声明?

时间:2013-03-31 17:20:10

标签: scala

我有一个方法(注意我已简化以使问题更简单)

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

任何提示?

2 个答案:

答案 0 :(得分:8)

您可以尝试在flag1中包装flag2Tuple,并在其上进行模式匹配。

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没有意义,则会两次。