En revenant à Scala après avoir écrit un peu de Haskell, j'ai commencé à utiliser le mot-clé type pour rendre mes définitions de classe un peu plus lisibles, par exemple :
type RestfulParams = Map[String, String]
def canonicalize(params: RestfulParams): String = { ... }
Le problème que j'ai rencontré est que ces définitions de type doivent vivre à l'intérieur d'une classe ou d'un objet - elles ne sont pas des "citoyens de première classe" comme elles le sont en Haskell. Si j'essaye de définir un type en dehors d'une classe ou d'un objet, j'obtiens un message du compilateur expected class or object definition
.
Mon problème est alors de savoir comment utiliser ces types dans plusieurs classes et objets d'un même paquet ? Ce que j'ai fait jusqu'à présent est assez moche :
object RestfulTypes { type RestfulParams = Map[String, String] etc }
Et ensuite dans un autre fichier de classe :
import utils.{RestfulTypes => RT}
def get(resource: String, params: RT.RestfulParams): String = { ... }
Existe-t-il une façon plus agréable de procéder ? Et, à propos, les gourous de Scala pensent-ils que c'est une bonne ou une mauvaise chose que les types ne puissent être définis qu'à l'intérieur de classes/objets ?
9 votes
Pourquoi pas ?
import utils.RestfulTypes._
?