Quantcast
Channel: Polski Portal Scala :: scala.net.pl » Int Int
Viewing all articles
Browse latest Browse all 4

#42 Funkcje częściowe

$
0
0

// 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!*)

Viewing all articles
Browse latest Browse all 4

Latest Images