0

以下に方法があります(質問を簡単にするために単純化したことに注意してください)

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

}

問題は、内部のif式が Int を返す場合でも、elseそのラップが を返すことUnitです。したがって、次のようになります。

Multiple markers at this line
- type mismatch; found : Unit 
 required: Int

任意のヒント?

4

2 に答える 2

8

ラッピングflag1を試すことができflag2Tupleその上でパターンマッチを行います。

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
  }

if flag2 の 2 回が意味をなさないので、内側の else の 2 番目の if ステートメントを変更します。

于 2013-03-31T17:29:14.293 に答える