2010-06-13 6 views
2

je frappe un peu d'une bizarrerie de la syntaxe de scala Je ne comprends pas vraimentcomportement étrange avec la méthode scala syntaxe

object Board { 
    def getObjectAt(x:Int, y:Int):Placeable = return locations(x)(y) 
} 

fonctionne très bien. Mais

object Board { 
    def getObjectAt(x:Int, y:Int):Placeable { 
     return locations(x)(y) 
    } 
} 

renvoie l'erreur

Board.scala:8: error: illegal start of declaration 
return locations(x)(y) 

J'ai trouvé des choses qui dit la deuxième forme convainc le compilateur scala que vous essayez de spécifier une extension du type de retour Placeable. Est-il possible de résoudre ce problème, ou devrais-je simplement éviter de spécifier un type de retour ici?

+4

BTW le mot-clé "retour" est superflu et peut être omis. En l'absence d'une instruction de retour explicite, Scala renvoie la dernière valeur calculée par la méthode. Le style recommandé est d'éviter les méthodes explicites (en particulier les retours multiples). –

+0

duplicata possible de [Quand utiliser le signe égal dans une déclaration de méthode Scala?] (Http://stackoverflow.com/questions/944111/when-to-use-the-equals-sign-in-a-scala-method -déclaration) –

Répondre

10

C'est à peu près la syntaxe de la fonction.

Si votre fonction a une valeur de retour, vous aurez toujours la définir comme une équation (en utilisant =), même si un bloc de calculs suit:

object Board { 
    def getObjectAt(x:Int, y:Int):Placeable = { 
     return locations(x)(y) 
    } 
} 

La notation

def func(...) { ... 

est un raccourci pour le type de retour Unit, c'est-à-dire une fonction sans valeur de retour.

+0

Merci Dario. Erreur de programmeur Java de manuel. – Ceilingfish