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...
Platební 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é...
Stá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...
Q - ELEKTRIK a.s. - divize klimatizace CENÍK klimafizací a
CENÍK klimatizací a příslušenství 2016
a 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
Clearlite-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...
Stá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ží ...
Stá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...
Technik 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.