folgende Code funktioniert: entlang der Linien von strEq, etwas zu schaffen, direkt Standard Operator zu verwenden, anstattKann der Standard-Operator geupdated oder curried sein?
val ls = Seq("a", "b", "b", "c")
def strEq(a: String, b: String) = a == b
val detectChange = (ls zip ls.tail).map((strEq _). tupled)
Ist es möglich?
scala> val ls = Seq("a", "b", "b", "c")
ls: Seq[String] = List(a, b, b, c)
scala> (ls, ls.tail).zipped.map(_ == _)
res0: Seq[Boolean] = List(false, true, false)
Weitere Varianten sind
scala> (ls zip ls.tail).map{case (a,b) => a == b}
res2: Seq[Boolean] = List(false, true, false)
scala> (ls zip ls.tail).map{((_: String) == (_: String)).tupled}
res5: Seq[Boolean] = List(false, true, false)
scala> (ls zip ls.tail).map(((_ == _): ((String, String) => Boolean)).tupled)
res0: Seq[Boolean] = List(false, true, false)
aber sie sind nicht leichter zu verstehen, oder einfacher zu schreiben:
val detectChange = (ls zip ls.tail).map(== _. tupled)
Ihr Code kompiliert nicht auf scala 2.11.8: ' ') 'erwartet aber'. ' gefunden. [Fehler] val detectChange = (ls zip ls.tail) .map (strEq _. Tupled) '. –
Sie müssen das '.' nach' strEq' entfernen, damit dies kompiliert werden kann. –
Die nächste Sache, die ich sehe (die ein bisschen mehr worse), die eingebaut ist, ist '(ls zip ls.tail) .map {fall (x, y) => x == y}' –