Le second paramètre est la valeur matérialisée, c'est-à-dire lorsque vous exécutez la source, c'est la valeur qui est renvoyée par la méthode run
. Toutes les formes de flux dans les ruisseaux Akka en ont, c'est-à-dire sources, puits, flux, bidiflows, etc. Avec les puits, c'est vraiment évident, si vous pliez le flux, vous allez vous retrouver avec une seule valeur, valeur est donnée à vous par la valeur matérialisée, ce qui est un avenir du résultat:
def fold[U, T](zero: U)(f: (U, T) ⇒ U): Sink[T, Future[U]]
pour les sources cependant, il est moins évident, mais voici un exemple:
def actorRef[T](bufferSize: Int, overflowStrategy: OverflowStrategy): Source[T, ActorRef]
Ceci est un Source
que , lorsque vous l'exécutez, se matérialise par un ActorRef
. Chaque message que vous envoyez à l'acteur sera émis par la source. Si vous vouliez l'utiliser dans Lagom, vous feriez quelque chose comme ceci:
def stream = ServiceCall { _ =>
Source.actorRef[String](16, OverflowStrategy.dropHead)
.mapMaterializedValue { actor =>
// send messages here, or maybe pass the actor to somewhere else
actor ! "Hello world"
// And return NotUsed so that it now materializes to `NotUsed`, as required by Lagom
NotUsed
}
}