2011-10-26 4 views
4
object TestClass { 
    def main (args: Array[String]) { 
    println("Hello World"); 
    val c = List (1,2,3,4,5,6,7,8,9,10) 
    println(findMax(c)) 
    } 
    def findMax (tempratures: List[Int]) { 
    tempratures.foldLeft(Integer.MIN_VALUE) {Math.max} 
    } 
} 

sortie affichée estvaleurs d'impression retour de la fonction scala

Hello World 
() 

Pourquoi la sortie ne

Hello World 
10 

Je fais cela dans IntelliJ

Répondre

10

C'est l'un des les fautes de frappe les plus courantes.

Vous êtes absent le = à la fin de votre méthode:

def findMax (tempratures: List[Int]) { 

lire:

def findMax (tempratures: List[Int]) = { 

En quittant le = hors signifie que votre méthode retourne Unit (rien).

+0

maintenant je me sens comme un dummie :). donc '=' signifie que cette méthode retourne quelque chose? – Omnipresent

+4

@Omnipresent: chaque méthode renvoie quelque chose, mais sans '=' le type de retour est toujours 'Unit', c'est-à-dire'() '. Gardez à l'esprit que Scala est conçu pour être un langage fonctionnel, et dans la programmation fonctionnelle, presque chaque construction renvoie une valeur, même des choses comme 'if':' val x = if b {ifVal} {elseVal} '. – ffriend

7

Étant donné que vous définissez findMax sans le type de retour, le type de retour est Unit ou ().

def findMax (tempratures: List[Int]) { ... } 

aka

def findMax (tempratures: List[Int]) : Unit = { ... } 

Vous voulez à la place

def findMax (tempratures: List[Int]) : Int = { ... } 

ou de type omis

def findMax (tempratures: List[Int]) = { ... }