Frage Bedeutung des Typs Set = Int => Boolean in Scala


ich verstehe nicht warum Set Definiert auf diese Weise erzeugt diese Ergebnisse.

Mein Verständnis ist das Set ist nur eine Funktion, die einen int- und return-boolean-Wert annimmt.

Kann mir jemand erklären, warum ich dieses Ergebnis mit dem Set bekomme?

Ich denke, das ist ein kurzer Weg, um die Funktion in Scala auszudrücken, aber ich bin neu in dieser Sprache und ich verstehe nicht, wie es funktioniert.

object sets {
  type Set = Int => Boolean

    var a=Set(3)                              //> a  : scala.collection.immutable.Set[Int] = Set(3)
    a(2)                                      //> res0: Boolean = false
    a(3)                                      //> res1: Boolean = true
    a(1)                                      //> res2: Boolean = false
}

7
2018-03-16 16:51


Ursprung


Antworten:


Der Typ, in dem Sie definiert haben type Set = Int => Boolean und das Objekt, in dem du erstellt hast var a=Set(3) sind eigentlich nicht miteinander verbunden. Auch das funktioniert:

scala> type Set = String
defined type alias Set

scala> val a = Set(3)
a: scala.collection.immutable.Set[Int] = Set(3)

Wenn du anrufst Set(3)Ruf an apply Methode auf der Objekt  Set. Wenn Sie hinzufügen new Schlüsselwort, es berücksichtigt Ihren Typ-Alias:

scala> val b = new Set()
b: String = ""

a(2), a(3), a(1) arbeiten weil Set[A]implementiert tatsächlich A => Boolean Funktionsmerkmal und apply Methode entspricht contains: http://www.scala-lang.org/api/2.10.3/index.html#scala.collection.immutable.Set


10
2018-03-16 17:12



Ich stimme zu, was Izstas sagte, sie sind verschiedene Dinge. Aber "type Set = Int => Boolean" hat Wirkung. In den folgenden Schritten in der Scala-Konsole verschwindet der Fehler nach "type Set = Int => Boolean".

scala> def func(s:Set) = 1
<console>:10: error: type Set takes type parameters
       def func(s:Set) = 1
                  ^

scala> def func(s:Set[Int]) = 1
func: (s: Set[Int])Int                      <---- specify the type in the set

scala> type Set = Int => Boolean             
defined type alias Set

scala> def func(s:Set) = 1                   <---- no error
func: (s: Set)Int

scala> def getSet(s:Set) = s
getSet: (s: Set)Set

scala> getSet(Set(1,2))
res0: Set = Set(1, 2)

scala> Set(1,2)
res1: scala.collection.immutable.Set[Int] = Set(1, 2)

scala> val t=Set(1,2)
t: scala.collection.immutable.Set[Int] = Set(1, 2)

1
2017-09-03 14:13