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

Mor*_*ive 0 scala

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

def getMyInt(flag1: Boolean, flag2: Boolean): Int = {
  if (flag1) 0;
  else {
    if (flag2) 1;
    if (flag2) 2;
  }
Run Code Online (Sandbox Code Playgroud)

}

问题是即使内部if表达式返回Ints,else那个包装也将返回Unit.因此,我得到:

Multiple markers at this line
- type mismatch; found : Unit 
 required: Int
Run Code Online (Sandbox Code Playgroud)

有小费吗?

Bri*_*ian 8

您可以尝试包装flag1flag2在其中Tuple进行模式匹配.

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

此外,控制标志作为参数闻起来很有趣.Martin Fowler有一篇关于重构标志参数的文章.