2017-09-03 1 views
1

Ich versuche, das Verhalten dieser Code zu verstehen:Scala Hinzufügen Artikel zu seq Ergebnisse in Typ Equals

enter image description here

def getListsByLC(lcId: Int): Action[AnyContent] = Action.async { 
    listRepo.getListsByLC(lcId).flatMap { lists => 
     val newLists: Seq[Future[Seq[List]]] = lists.map { list => 
     itemRepo.getItemsByList(list.id).map { items => 
      list.items.get :+ items 
     } 
     } 


     Future.sequence(newLists).map(_.flatten).map { lists => 
     Ok(Json.obj("lists" -> lists)) 
     } 
    } 
    } 

I seq von Listen haben und innerhalb List gibt es einen anderen seq von Item. Ich möchte diese items zu jedem entsprechenden list hinzufügen. Mein Compiler sagt mir irgendwie, dass die Rückgabe von lists.map { ... } ein Equals ist. Ich kann keine Dokumentation zu diesem Verhalten finden. Was mache ich falsch? Fehle ich etwas? Danke im Voraus!

+0

Bitte kopieren Sie den Code in die Frage einfügen. –

+0

'Equals' ist das Merkmal, das' list.items.get' und 'items' gemeinsam haben und ist das einzige, was der Scala-Typ-Checker gemeinsam zwischen diesen beiden findet; Dies ist ein Hinweis darauf, dass die Arten dieser beiden Dinge nicht das sind, was Sie erwarten. Sie haben eine andere seltsame Sache; 'Seq [Future [Seq [List]]]' ist eine seltsame Typ-Signatur, es sei denn, Sie haben eine benutzerdefinierte Klasse namens 'List' definiert. A 'Seq [List]' ist immer wieder eine Sequenz des Companion-Objekts "List", kein "Seq" von Listen von etwas. Listen sind höherwertige Typen, d. H. Sie nehmen ein Typargument, um ein konkreter konkreter Typ zu werden (z. B. "List [Int]"). – badcook

+0

@badcook 'Seq [Liste]' könnte verwirrend sein. Ja, ich habe eine benutzerdefinierte Klasse namens 'List' definiert. Danke für deinen Kommentar, ich werde versuchen, die 'Equals' Situation zu beheben :) – Nocebo

Antwort

1

Equals ist eine Scala-Eigenschaft definiert als "eine Eigenschaft, die Operationen für die Gleichheit enthält". Dies ist ein unerwartetes Verhalten in Ihrem Code. Dies bedeutet wahrscheinlich, dass Ihr Code den erwarteten Rückgabetyp nicht zurückgibt. Ich vermute stark, dass es mit der :+ Funktion zu tun hat.

mehr über Liste Verkettung Lesen Sie hier: https://alvinalexander.com/scala/how-merge-scala-lists-concatenate