0

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

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

有小费吗?

4

2 回答 2

8

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

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

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

于 2013-03-31T17:30:50.757 回答
3

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

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

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

于 2013-03-31T17:29:14.293 回答