2016-08-29 4 views
0

Ich habe das folgende Stück Code, der eine Quelle erstellt, die MarketFactors ausgibt. Ich möchte jedoch in der Lage sein, den Typ des Zufallsgenerators zu wechseln, oder was die toMarketFactors-Funktion tut.#Repr [A] in Akka Stream Quellentyp

Da jedoch alle Transformationen in der ursprünglichen Quelle im Typ sind, kann ich sie nicht in einen generischen Typ in der Eigenschaft umwandeln, die die Klasse implementiert (Option[Source[MarketFactors, NotUsed]]), was muss ich tun?

Ich befestige die Sink und später materialisieren, ist das eine schlechte Praxis?

override def factors: Option[Source[CorrelatedRandomVectorGenerator, NotUsed]#Repr[MarketFactors]] = { 
    val source = for { g <- generator } yield Source.repeat(g) 

    val marketFactors = Flow[CorrelatedRandomVectorGenerator].map(toMarketFactors) 

    source.map(_.via(marketFactors)) 
} 

Antwort

0

Verwenden Sie den Typ Parameter auf factors Methode.

case class CorrelatedRandomVectorGenerator() 
case class MarketFactors1() 
case class MarketFactors2() 

def factors[T](transformation: CorrelatedRandomVectorGenerator => T): Option[Source[T, NotUsed]] = { 
    val generator = Option.empty[CorrelatedRandomVectorGenerator] 
    val source = for { g <- generator } yield Source.repeat(g) 

    val marketFactors = Flow[CorrelatedRandomVectorGenerator].map(transformation) 
    source.map(_.via(marketFactors)) 
} 

val toMarketFactors1: CorrelatedRandomVectorGenerator => MarketFactors1 = ??? 
val toMarketFactors2: CorrelatedRandomVectorGenerator => MarketFactors2 = ??? 

val source1: Option[Source[MarketFactors1, NotUsed]] = factors(toMarketFactors1) 
val source2: Option[Source[MarketFactors2, NotUsed]] = factors(toMarketFactors2) 
Verwandte Themen