2016-03-23 6 views
0

Ich habe eine Liste. Für alle Zahlen in der ungeraden Position möchte ich 0 machen. Und für alle Zahlen in der geraden Position möchte ich es behalten, wie es ist. Ich versuche es über die Karte in der folgenden Weise zu machen.Forward-Referenz erstreckt sich über die Definition der Variablen in Scala

Hier ist mein Code

def main(args: Array[String]) { 
var l1 = List (1,2,3,4,5,6) 

println(l1.map(f(_))) 
var c = 0 
def f(n:Int):Int = 
{ 

    if (c%2 == 0) 
    {c +=1 
    return n} 
    else 
    {c += 1 
    return 0} 

ich die Variable wollen den Überblick über die Position zu halten. Aber wie es scheint, kann ich den Verweis "c" nicht weiterleiten.

bekomme ich folgende Fehler

scala Vorwärts-Referenz über Definition der Variable c erstreckt

ich nicht auch ‚c‘ in der Funktion erklären kann, weil sie nie auf diese Weise erhöht werden .

Was sollte die Idee Weg, um zu erreichen, was ich versuche, mit Hilfe der Karte.

Antwort

5

Ich habe eine Liste. Für alle Zahlen in ungeraden Position möchte ich es 0 machen. Und für alle Zahlen in gerader Position möchte ich es behalten, wie es ist.

hier eine elegante Lösung dieses Problems:

l1.zipWithIndex map { case (v, i) => if (i % 2 == 0) v else 0 } 

Als Grund, warum Ihr Code fehlschlägt: Sie versuchen, variable c vor seiner Erklärung im Code zuzugreifen. Hier:

println(l1.map(f(_))) 
var c = 0 

Ihre Funktion f versucht Variable c zuzugreifen, die noch nicht erklärt. Ordne diese zwei Zeilen neu an und es wird funktionieren. Aber ich würde empfehlen, bei meiner anfänglichen Vorgehensweise zu bleiben.

+0

Perfekte Antwort, –

Verwandte Themen