2017-01-11 7 views
1

私は部分的な関数が入力0を破棄することを期待していますが、代わりにそれは一致エラーを出しています。どうしてそれが起こっているのか正確に説明してください。私は何が欠けているのですか?入力が0ケースに対応するために、ガードのd != 0なぜscalaの部分関数が入力0に対して実行時エラーを与えていますか?

はあなたの実装を変更するので、ケースと一致していません。0のとき enter image description here

object PartialFunction extends App { 

    val divider : PartialFunction[Int,Int] = { 
    case d : Int if d != 0 => 42/d 
    } 
    println(divider(0)) 
    //println(fraction(0)) 
} 
+1

あなたのパターンに一致しないためですか? –

+1

期待される出力は?どのようにすれば、コンパイラはその 'divider(0)'コールで何をするべきかを知ることができますか? –

答えて

3

あなたは何をすべきかを教えてくれませんでした

val divider : PartialFunction[Int,Int] = { 
    case d : Int if d != 0 => 42/d 
    case 0 => 0 //return some integer 
    } 
+1

ありがとう、私は大文字小文字が任意の整数にマッチしていると思っていましたが、なぜ0の一致エラーが表示されるのですが、今私はかなり明確です。それはガードですこれは0を評価することを妨げているので、0のための一種のノマッチです。 –

1

また、デフォルトのケースを定義することもできます。

val divider : PartialFunction[Int,Int] = { 
    case d : Int if d != 0 => 42/d 
    case _ => 0 
    } 
関連する問題