Wracając do Scali po okresie pisania Haskell, zacząłem za pomocą słowa kluczowego typu, aby moje definicje klas nieco bardziej czytelny, np:Scala typ kluczowe: jak najlepiej wykorzystać go w wielu klasach
type RestfulParams = Map[String, String]
def canonicalize(params: RestfulParams): String = { ... }
Kłopot, który napotykam, polega na tym, że definicje tego typu muszą żyć wewnątrz klasy lub przedmiotu - nie są "obywatelami pierwszej klasy", tak jak w Haskell. Jeśli spróbuję zdefiniować typ poza klasą lub obiektem, otrzymam kompilator expected class or object definition
.
Mój problem polega na tym, jak używać tych typów w wielu klasach i obiektach w pakiecie? Co mam zrobić teraz wydaje się dość brzydki:
object RestfulTypes { type RestfulParams = Map[String, String] etc }
A potem w innym pliku klasy:
import utils.{RestfulTypes => RT}
def get(resource: String, params: RT.RestfulParams): String = { ... }
istnieje ładniejszy sposób to zrobić - a przy okazji nie guru Scala myślę, że to dobry rzecz czy coś złego, że typy można definiować tylko wewnątrz klas/obiektów?
Dlaczego nie 'import utils.RestfulTypes._'? – soc