// literał definiujący funkcję częściową to sekwencja klauzul „case” scala> val pf: PartialFunction[Int,Int] = {case i if i<0 => -i} pf: PartialFunction[Int,Int] = <function1> // metoda isDefinedAt pozwala sprawdzić, czy funkcja // częściowa ma określoną wartość dla konkretnego argumentu scala> val f = (x:Int) => if (pf.isDefinedAt(x)) pf(x) else -1 f: (Int) => Int = <function1> scala> f(123) res0: Int = -1 // Uwaga! definiując funkcję częściową musimy określić jej typ // nieco bardziej rozbudowane przykłady scala> al pf2: PartialFunction[Any,Any] = {case x:Boolean => !x; case i:Int => i+1} pf2: PartialFunction[Any,Any] = <function1> scala> val l = List(true, 12, 'a, 8, "A qq!") l: List[Any] = List(true, 12, 'a, 8, A qq!) // dla Traversable[A] wiemy, że: // collect[B] (pf: PartialFunction[A, B]) : CC[B] scala> l collect {case i:Int => i*i; case s:String => "*"+s+"*"} res1: List[Int] = List(144, 64, *Aqq!*)