2016-03-29 6 views
3

Ich habe untersucht, wie man ein Set in zwei basierend auf dem Inhalt eines dritten Satzes aufteilen. Versehentlich stieß ich auf diese Lösung:Scala Partition ein Set

val s = Set(1,2,3) 
val s2 = Set(4,5,6) 
val s3 = s ++ s2 

s3.partition(s) 
res0: (scala.collection.immutable.Set[Int],scala.collection.immutable.Set[Int]) = (Set(1, 2, 3),Set(5, 6, 4)) 

Die Signatur von partition ist wie folgt:

def partition(p: A => Boolean): (Repr, Repr) 

Kann mir jemand erklären, wie ein Werk anstelle einer Funktion gesetzt Bereitstellung?

Vielen Dank im Voraus

Antwort

6

A gesetzt s: Set[A]ist eine Funktion A => Boolean: für jeden Wert a von A Sie zurückkommen, ob sa enthält oder nicht.

scala> val f: Int => Boolean = Set(1,2,3) 
f: Int => Boolean = Set(1, 2, 3) 

scala> f(1) 
res0: Boolean = true 

scala> f(4) 
res1: Boolean = false 

Wenn Sie die documentation for .apply betrachten, sehen Sie

def (Elem: A): apply Boolean
Testet, ob ein Element in diesem Set enthalten ist.

Diese Methode ist äquivalent zu enthält. Es erlaubt, dass Sätze als Prädikate interpretiert werden.