Prezentace - jOpenSpace
Transkript
Pattern Type Class! ve Scale Jakub Janeček AVAST Software Type Class • pochází z jazyka Haskell ghci> :t (==) (==) :: (Eq a) => a -> a -> Bool • ad-hoc polymorfismus • type class definuje koncept (“rozhraní”) • množina požadavků na nějaký typ • • např. metoda pro řazení hodnot typu T může být napsána genericky za předpokladu, že víme jak hodnoty typu T porovnávat … ale s možností koncepty skládat a bez dědičnosti! Syntax • currying def cplus(a: Int)(b: Int) = a + b • implicitní parametry def iplus(a: Int)(implicit b: Int) = a + b • context bound def m[T: Context](value: T) = … def m[T](value: T)(implicit context: Context[T]) = … Příklad 1 def getCount[T](v: T)(implicit counter: Countable[T]): Int = { counter.count(v) } ! trait Countable[-U] { def count(value: U): Int } ! implicit object StringCountable extends Countable[String] { def count(value: String) = value.size } implicit object ListCountable extends Countable[List[_]] { def count(value: List[_]) = value.size } object ListUniqueCountable extends Countable[List[_]] { def count(value: List[_]) = value.toSet.size } ! > getCount(“hello”) // 5 > getCount(List(1,1,2,2,3,3)) // 6 > getCount(List(1,1,2,2,3,3))(ListUniqueCountable) // 3 Příklad 2 def accept[T: Acceptable](value: T) = value ! trait Acceptable[U] ! implicit object IntAcceptable extends Acceptable[Int] ! scala> accept(100) // OK scala> accept(100.0) // ERROR error: could not find implicit value for evidence parameter of type Acceptable[Double] Příklad 3 - skládání def min[T](x: T, y: T)(implicit c: Comparable[T]) = { if (c.less(x, y)) x else y } ! trait Comparable[T] { def less(a: T, b: T): Boolean } ! implicit object IntComparable extends Comparable[Int] { def less(a: Int, b: Int) = a < b } ! class ListComparable[U](implicit c: Comparable[U]) extends Comparable[List[R]] { def less(a: List[U], b: List[U]) = c.less(a.head, b.head) } implicit def constructListComparable[V: Comparable] = new ListComparable[V] ! > min(20, 10) // 10 > min(List(20), List(10)) // List(10) Použito v praxi • Metoda sum na kolekcích (Numeric) def sum[B >: A](implicit num: Numeric[B]): B • Metoda sorted na kolekcích (Ordering) def sorted[B >: A](implicit ord: Ordering[B]): List[A] • CanBuildFrom v kolekcích • ScalaZ a obecně v FP Dotazy?
Podobné dokumenty
TL - Akuterm
Tento dokument nevyhodnocuje nebezpecí rozbití skla zpusobené termálním šokem. Dále ve výpoctu (AGC Glass Europe) není zahrnuto riziko samovolné exploze tepelne tvrzeného skla prítomností inkluze s...
VícePlatební systém XPAY
2. Seznam chybových stavů skryté platební brány Skrytá platební brána v případě chybných vstupních parametrů nebo chybného nastavení reaguje zobrazením chybového stavu. Zde jsou uvedeny jednotlivé...
VíceStáhnout - Cetelem
obměnit celý šatník, a také mám silné tušení, že bych měla začít pořádně šetřit. Vypuštění každoročních nákupů oděvů o velikost větších je tedy nasnadě (nehledě na koupi nové skříně, krémů proti ce...
VíceQ - ELEKTRIK a.s. - divize klimatizace CENÍK klimafizací a
CENÍK klimatizací a příslušenství 2016
Vícea příslušenství
Plachta zakrývací 8×12 m standard odolná vůči otěru, plísním a kyselině materiál PE vlákna o vysoké hustotě oboustranně laminovaná nerezavějící oka ve vzdálenosti 1 m č. pol. 4502029500
VíceClearlite-CZ- Spol. Kovac
hlavní změna v parametrech minimální změna v barevnosti – méně zelenkavé základní sklovina ovlivní ostatní produkty • škála skel low-E • vrstvené bezpečnostní sklo – Stratobel atd. • hlavní změna b...
VíceStáhnout - Cetelem
příroda nabízela. To mi imponuje. Nemám ráda plýtvání a luxus na úkor životního prostředí. Člověk samozřejmě inklinuje k výrokům, že dříve bylo lépe, a utíká ke starým časům jako do pohádky. Snaží ...
VíceStáhnout PDF - treninky.cz
"Když jsem v roce 1998 začínal v pojišťovnictví, nastoupil jsem do firmy a v ní jsem se stal..." Ano, příběh musí být pravdivý a tedy uvěřitelný, inspirující a nejlépe pozitivní. A to ten můj je, p...
VíceTechnik v roli obchodníka
Zkušení obchodníci, znalí produktu, jsou často více odborníci než prodejci. Noví obchodníci se často orientují na parametry zboží a služeb.
Více