2 votes

Type scala 'extraction'.

Ce n'est peut-être pas la terminologie la plus correcte, mais ce que je veux dire par type de boîte est que Box[T] pour le type T . Donc Option[Int] est une boîte Int .

Comment pourrait-on s'y prendre pour extraire ces types ? Ma tentative naïve :

//extractor
type X[Box[E]] = E //doesn't compile. E not found

//boxed
type boxed = Option[Int]

//unboxed
type parameter = X[boxed] //this is the syntax I would like to achieve
implicitly[parameter =:= Int] //this should compile

Y a-t-il un moyen de le faire ? En dehors du blog Apocalisp, j'ai du mal à trouver des instructions sur la métaprogrammation au niveau des types en Scala.

2voto

0__ Points 23597

Je ne peux imaginer que deux situations. Soit vous utilisez des paramètres de type, alors si vous utilisez un tel type supérieur, par exemple comme argument d'une méthode, vous aurez son paramètre de type dupliqué dans les génériques de la méthode :

trait Box[E]

def doSomething[X](b: Box[X]) { ... } // parameter re-stated as `X`

ou vous avez des membres de type, alors vous pouvez vous y référer par instance :

trait Box { type E }

def doSomething(b: Box) { type X = b.E }

...ou en général

def doSomething(x: Box#E) { ... }

Je pense donc que vous devez réécrire votre question en fonction de ce que vous voulez réellement obtenir.

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