2012-04-06 3 views
2

Ich versuche scala zu lernen und bisher war es großartig. Ich habe Schwierigkeiten herauszufinden, wie man diesen Fehler beheben kann, und ich habe versucht, mich über Foreach und Return-Anweisungen in ihnen zu erziehen, aber ich kann das Problem immer noch nicht verstehen, also poste ich hier mein Problem:foreach in Methode, um Wert zurückzugeben

def a: Int = { 
    for(i <- Array(1,2,3,4,5)){ 
    if(i == 3) 
     return i 
    } 
} 

Das obige Verfahren wird nicht kompiliert, erhalte ich folgende Fehlermeldung:

error: type mismatch; 
found : Unit 
required: Int 
     for(i <- Array(1,2,3,4,5)){ 
      ^

ich verstehe, was eine Art ist, aber ich kann nicht herausfinden, wie diese zu beheben. Wie würde ich I int zuweisen? Das erwartete Verhalten ist, dass die Methode 3 zurückgibt. Würde dies passieren und was ist falsch an meinem Code?

+7

'return' wird normalerweise nicht in Scala verwendet, und veränderliche Datenstrukturen wie' Array' werden normalerweise vermieden. Das idiomatische Äquivalent Ihrer Methode (einschließlich der Vorgabe aus drexins Antwort) wäre etwas wie 'def a = 1 bis 5 find (_ == 3) getOrElse 0' (oder alternativ' val a = 3' :)) –

Antwort

11

Das ist, weil Ihr Lambda in foreach garantiert, einen Wert zurückzugeben. Wenn Sie einen Standard-Rückgabewert angeben, sollte es funktionieren.

def a: Int = { 
    for(i <- Array(1,2,3,4,5)){ 
    if(i == 3) 
     return i 
    } 
    0 
} 
2

Es ist, weil es sonst keinen oder einen Standard-Rückgabewert gibt.

Wenn eine Methode den Rückgabetyp Int hat, müssen alle Pfade in dieser Methode einen Int zurückgeben. Dies ist bei Ihrer Implementierung nicht der Fall. Wenn zum Beispiel im Array die Zahl 3 nicht vorhanden wäre, würde nichts zurückgegeben, was bedeutet, dass der Rückgabetyp Unit lautet.

Verwandte Themen