2017-07-20 1 views
1

Ich bin gebeten worden, eine singletonSet Funktion zu schaffen, die einen Singleton von einer ganzzahligen Wert erzeugt: Den Code, den ich verwenden:A singletonSet Funktion, die ein Singleton Set von einem Integerwert im SCALA Erzeugt

def singletonSet(elem: Int): Set = { 
    def isInSet (givenElement: Int) = 

      if (elem == givenElement) true 
      else false 

    isInSet 
    } 

online überprüft jemand tat

def singletonSet(elem: Int): Set = { 
    x => List(elem).contains(x) 
    } 

bedeutet das er/sie das Element in eine Liste gesetzt und rief die .contains() Funktion auf sie? und ich bekomme nicht, was x hier tut? Ich habe diesen Code ausprobiert. Es läuft ohne Fehler. Ich verstehe es einfach nicht. Vielen Dank.

Antwort

0

Ich kann mir vorstellen, das Set, das Sie hier definieren, ist kein scala.immutable.Set Merkmal oder? In Bezug auf den Code ruft Aufruf List(something) grundsätzlich die apply Methode auf dem List Companion-Objekt, um eine unveränderliche Liste zu erstellen.

Die Funktion singletonSet gibt im Grunde eine Funktion höherer Ordnung zurück, die ein Element namens x und einen booleschen Wert zurückgibt, aber ich denke nicht, dass dieser Codeabschnitt kompiliert wird, da er Typinformationen zum Parameter x fehlt.

+0

Die Menge, die wir sind Das Sprechen ist ein Typ, den wir definiert haben "type Set = Int => Boolean" und es gibt keine Erwähnung darüber, ob es veränderlich oder unveränderlich sein muss. – shirin

+0

Dann fügt er ein Element in eine neue Liste ein und ruft das contains auf, so dass die zurückgegebene Funktion vom Typ 'Set' ist, da sie ein Element int übernimmt und einen booleschen Wert zurückgibt (Das Ergebnis des Aufrufs des contains) Methode) – jmoyano

2

Wie ich

type Set = Int => Boolean 

So x ist nur ein Int, die die zurückgegebene Funktion gilt verstehen.

bedeutet das er/sie legte das Element in einer Liste und rief die .contains() Funktion auf sie?

Ja, es sieht so und wir können es vereinfachen:

def singletonSet(elem: Int): Int => Boolean = { 
    x:Int => elem == x:Boolean 
    } 

Lassen Sie uns Arten entfernen

def singletonSet(elem: Int): Int => Boolean = { 
    x => elem == x 
    } 

und ersetzen x mit Platzhalter _

def singletonSet(elem: Int) = elem == (_:Int) 
+0

Also das ist meine ganze innereFunktion: 'x: Int => elem == x: Boolean', die Sie es zu' x => elem == x' oder sagen wir Int => Boolean'. aber wie sieht es mit der anderen funktion aus. 'x => List (elem) .contains (x)' können wir sagen, dass es x nimmt und '.contains (x)' auf eine Liste von (elem) s anwendet. Was ich aus dieser Definition sehe, ist '(x: Int) => Liste (elem) .contains (x): Boolean'. Ist das richtig? – shirin

+0

Ja, es dauert x und gilt. Enthält (x). (x: Int) => Liste (elem) .contains (x) bedeutet Liste (elem) .contains (_: Int) – Ivan

Verwandte Themen