2016-07-14 31 views
0

Ich bin ziemlich neu bei scala und habe ein paar einfache Dinge ausprobiert. Ich habe eine Funktion, die etwa wie folgt aussieht:Wie gebe ich einen Wert aus einer Scala-Funktion zurück?

private def checkValu() : Option[Integer] = { 
    if(!list.isEmpty()){ 
     for(value <-list){ 
      val x = list.get(0) 
     } 
    } 
    return (x) 
    } 

ich die Funktion aufrufen, um den Wert x.I den Wert der Liste zugreifen zurückzukehren und wollen den ersten Wert in der Liste zurückzukehren. Aber irgendwie scheint das nicht zu funktionieren. Es gibt mir eine Fehlermeldung,

"not found value x". 

Ich habe auch versucht, ohne die „Rückkehr“ statment tun, aber dann gibt es mir Fehler bei der, wenn und Schleife sagen

"type mismatch; found : Unit required: Option[Integer]" 

Was soll ich hier fehlt? Könntest du bitte hier helfen?

Vielen Dank im Voraus.

+4

http://www.tutorialspoint.com/scala/ – Dima

+3

Es ist nicht Javascript ist. Der Gültigkeitsbereich von x ist der Block, in dem er sich befindet, nicht die enthaltende Funktion. –

+3

Warum wird das 4 mal abgelehnt? Dies ist eindeutig jemand, der a) versucht b) neu in der Sprache und c) auf der richtigen Website Hilfe zu bekommen. Es gibt nichts Entzündliches und das Beispiel enthält Code. – wheaties

Antwort

3

Ich glaube, Sie suchen etwas wie folgt aus:

def checkValue() : Option[Integer] = { 
    if(!list.isEmpty()) {//Assuming list is java.util.List[Integer] and want the last value 
     return Some(list.get(list.size() - 1)) 
    } 
    None 
} 

Diese Lösung verwendet java.util.List<Integer>, ich denke, Sie list gewöhnt. None wird einfach zurückgegeben werden, wenn keine Werte vorhanden sind, andernfalls die letzte, obwohl ich nicht sicher war, dass Ihre Absicht war, im Fall, dass Sie die ersten: return Some(list.get(0))

Eine idiomatische Lösung:

def checkValue() : Option[Integer] = { 
    if(!list.isEmpty()) {//Assuming list is java.util.List[Integer] and first value is required 
     Some(list.get(0)) 
    } else { 
     None 
    } 
} 

I war unsicher, welchen Wert Sie zurückgeben wollten, weil Sie die gesamte Liste durchlaufen wollten (auch die Namensgebung der Methode hat nicht geholfen). Wahrscheinlich hatte @cmbaxter recht und du wolltest das erste.

Nur ein paar Anmerkungen zu den Fehlermeldungen: Erstens: Sie haben sich auf eine Variable x bezogen, die außerhalb des Geltungsbereiches lag (außerhalb des Verständnisses), also war es keine gute Wahl. Die zweite wurde wahrscheinlich durch die if Anweisung ohne sonst verursacht, die Unit ergibt. Da dies der einzige Ausdruck bleibt, wurde versucht, zurückgegeben zu werden, obwohl das kein Option[Integer] war.

+0

Ich glaube nicht, dass das OP nach dem letzten Element sucht (was leicht mit 'lastOption' befriedigt werden könnte), da sie jedes Mal, wenn die Schleife durch die Liste läuft, den 0. Index erhalten. Ich denke, was sie wollen, ist 'headOption' – cmbaxter

+0

@cmbaxter Ich denke, das OP verwendet' java.util.List', also keine 'lastOption' oder' headOption', es sei denn, es gibt eine implizite Konvertierung, obwohl ich denke, dass das verwirrender wäre ihr ihm. –

+0

Guter Punkt, wahrscheinlich, wie durch den Aufruf von '.get' – cmbaxter

2

Wäre dies nicht einfacher sein:

def checkValue(): Option[Int] = list.headOption 
// assuming list is List[Int] and you want to return option of the first element 
Verwandte Themen