2013-03-31 60 views
0

我有如下(注意我已經簡化,使問題更簡單)如果語句在scala中的else語句中?

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

}

問題是,即使內if表達式返回整型,一個包裝將返回Unitelse的方法。因此我得到:

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

任何提示?

+2

但您的方法不能返回int。如果flag1和flag2都不正確呢? –

+1

如果一個'if'表達式沒有'else'部分,就好像你寫了'if(cond)value else()'('()'是'Unit'值的文字符號)。 「if」表達式的類型是其每個「邊」的LUB(最具體的常見超類型)。 –

回答

8

您可以嘗試在Tuple和模式匹配上打包flag1flag2

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

此外,控制標誌作爲參數smell funny。 Martin Fowler對重構標誌參數有一個article

+0

爲了解決這個問題,我想解決這個問題。 –

3

如果您的inner else語句中沒有if語句適用,則不會返回任何內容。更改您的代碼如下所示,將編譯:

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

我改變第二,如果在內部別的,因爲兩次聲明中,如果FLAG2沒有意義。