0
trait RequestBuilder {
type Out
def complete(p: Promise[Out]): Unit
}
def makeRequest(in: RequestBuilder): Source[(RequestBuilder, Promise[in.Out]), Future[in.Out]] = {
val p = Promise[in.Out]
Source.single(in -> p).mapMaterializedValue(_ => p.future)
}
val sink = MergeHub.source[(RequestBuilder, Promise[???])].to(Sink.foreach {
case (r, p) => r.complete(p)
}).run()
sink.runWith(makeRequest(new RequestBuilder {
type Out = Int
def complete(p: Promise[Out]): Unit = p.success(1)
}))
問題があるのが午前問題を示してstrawmanプログラムは、どのように私は、シンクでPromise[???]
を入力しないのですか?あなたはタプルに対してタイプエイリアスを作ることができ
これは実際には動作しません動作するはずです
。あなたがそれを提供しなければ、それは 'Nothing'として推論されます。 'Sink'は共変ではないので、何かを結ぶことができなくなります。 – Jeff
何を言っているのか分かりません。あなたは自分のコードとエラーを表示できますか? – Dima
上記にはいくつかの問題があります。 1つは、タイププロジェクションを使用していることです。これは、パスに依存するタイプが必要なため、この場合は機能しません。もう1つは、型エイリアスとケースクラスの両方がコンパイル時に知る必要のあるパラメトリック型を持っていることです。 – Jeff