2 votes

Alias de type pour le type inféré

J'ai une méthode avec un type de retour compliqué et je voudrais avoir une fonction qui prend le résultat de cette méthode comme paramètre. Est-il possible de créer un alias pour le type de retour de la méthode ? Quelque chose comme typeof en C++

par exemple

object Obj {
    def method(x:Int) = 1 to x
    type ReturnType = ???

    //possible solution if i know a parameter for which the method won't fail
    val x = method(1)
    type ReturnType = x.type

    //another possible solution, I don't need a parameter that won't fail 
    //the method but i still think there is a better way
    lazy val x = method(1)
    type ReturnType = x.type

    //I would then like to have a function which takes ReturnType as a parameter
    def doit(t:ReturnType) = Unit
}

Le problème, c'est que le compilateur connaît le type, mais je ne sais pas comment l'obtenir de lui.

2voto

EECOLOR Points 6341

Le seul moyen auquel j'ai pu penser est le suivant :

class Return[T](f:() => T) {
  type Type = T
}

def getDifficultReturnType() = 1 to 10

val Return = new Return(getDifficultReturnType)

def doIt(t:Return.Type) = {

}

Je ne suis pas sûr que ce soit ce que vous recherchez.

0voto

0__ Points 23597

À ma connaissance, ce n'est pas possible. Peut-être que dans une future version de Scala avec macros de type .

Quoi qu'il en soit, ne pas tenir compte du type s'il n'est pas trivial n'est pas une bonne conception à mon avis. Je comprends que vous ne voulez pas taper 80 caractères, mais s'il est crucial de préserver ce type (comme cela semble être le cas), cela devrait être explicité à un peu de point.

Vous pouvez utiliser un alias de type :

object Obj {
  type ReturnType = My with Very[LongAndComplicated] with Name
  // explicit type ensures you really get what you want:
  def method(x: Int): ReturnType = 1 to x  

  def doit(t: ReturnType) {}
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X