私は Scala を初めて使用し、その構造をデコードしようとしています。パターン マッチングについて学びました。構文は Java の switch ステートメントに似ています。
val x: Int = Random.nextInt(10)
x match {
case 0 => "zero"
case 1 => "one"
case 2 => "two"
case _ => "other"
}
このコードは非常に明白で読みやすいです。私はかなり明白で明確な部分関数に出くわしました。
部分関数は、与えられる可能性のあるすべての入力値に対して答えを提供しない関数です。
私が混乱してcase
いるのは、次のような部分関数の本体で使用することです:
val divide2: PartialFunction[Int, Int] = {
case d: Int if d != 0 => 42 / d // WHAT IS THIS ?!
}
case
がステートメントなしでどのように使用されるか、Scala によってどのように解釈されるか、どのように読み取られるか、メソッドなのか、クラスなのか、それとも別の構成要素なのかがわかりません。ステートメントなしmatch
で使用できる他の方法は何ですか?case
match
編集:
私はこのケースをいじってみましたが、まだわかりません。例えば
val SomeFun: PartialFunction[Int, Int] = {
case d: Int if d != 0 => 1000 / d
case f: Int if f != 2 => 100 / f
case m: Int if m != 1 => 10 / m
}
これはどのように作動しますか?
これを試すとエラーが発生します
val SomeFun = {
case d: Int if d != 0 => 1000 / d
case f: Int if f != 2 => 100 / f
case m: Int if m != 1 => 10 / m
}
Error:(29, 17) missing parameter type for expanded function
The argument types of an anonymous function must be fully known. (SLS 8.5)
Expected type was: ?
部分関数以外の場所で使用されている一致のないケースはありますか?