2017-07-25 2 views
0

Wie deklariert man eine Liste var, die durch die Rückkehrliste einer Funktion initialisiert wird?Initialisiere eine Liste von einer Funktion zurück in Scala

Ich möchte ein List[Any], nennen wir es newList, auf die durch eine bestimmte Funktion zurückgegebenen Werte zugewiesen werden, sagen makeList(), dass eine List[Any] zurückgibt.

wie:

var newList = makeList(arg1, arg2) 

, die einen Fehler gibt: „Expression von Typ Jede entspricht nicht erwarteten Typ Liste [Alle]“

Ich möchte dann Index in das erste Element von newList wie: newList(0)

ich habe val newList : List[Any] = makeList(arg1, arg2) versucht aber ich habe immer noch die Fehlermeldung bei newList(0)

Ich habe bestätigt, dass makeList eine Liste [Beliebig] zurückgibt.

Der letzte Fehler kommt von newList(0) als die letzte Zeile in einer Funktion, also wäre die letzte Frage: was würde der Rückgabetyp einer Funktion sein, die ein Element einer Liste [Any] zurückgibt, einfach irgendwas?

+2

Ja, das sollte funktionieren. Welchen Fehler bekommst du? Beachten Sie jedoch, dass sowohl "var" (anstelle von "val") als auch "List [Any]" (anstelle von etwas richtig Getipptem) Code-Gerüche sind. – Thilo

+0

Code riecht? Ich erhalte eine Fehlermeldung "Ausdruck des Typs Any entspricht nicht dem erwarteten Typ. List [Any]" – user7804781

+2

'List [Any]' ist ein ** schlechtes ** Ding. Es bedeutet, dass der Compiler die Art des Pfades verloren hat die Elemente der Liste Es macht die Dinge viel schwieriger vorwärts – jwvh

Antwort

1

Die Art der Zuweisung ist korrekt.

Beispiel

scala> def makeList = List("scala", "clj", 1, 100.5) 
makeList: List[Any] 

scala> val newList = makeList 
newList: List[Any] = List(scala, clj, 1, 100.5) 

scala> newList = List("I want to change the reference of list") 
<console>:12: error: reassignment to val 
     newList = List("I want to change the reference of list") 
      ^

in obigem Beispiel newList ist val bedeutet, dass Sie es nicht später mutieren können.

var verwenden, können Sie die Referenz ändern

scala> def makeList() : List[Any] = List("scala", "clj", 1, 100.5) 
makeList:()List[Any] 

scala> var newList = makeList 
newList: List[Any] = List(scala, clj, 1, 100.5) 

scala> newList = List("I changed the reference of list") 
newList: List[Any] = List(I changed the reference of list) 
+0

W Wenn ich die var einen Wert mit einer Funktion zuweisen, die eine Liste zurückgibt, erhalte ich die Fehlermeldung "Ausdruck vom Typ Beliebige entspricht nicht dem erwarteten Typ Liste [Beliebig]" – user7804781

+0

Können Sie Ihre 'makeList' Methode anzeigen? – prayagupd

+0

Die Signatur lautet: def scalarsToList (Skalare: Map [String, JValue], Definitionen: List [(String, ScalarDefinition)]): List [Any] = {...}, so dass eine Liste [Any] zurückgegeben wird. Diese Methode funktioniert/hat Tests bestanden. – user7804781