如何在F#中使用Akka.Streams.*.ConcatMany?
我想创建一个流,用传入的元素创建一个新的源(它将是一个持久性查询),然后将结果展平。类似于此简化示例:如何在F#中使用Akka.Streams.*.ConcatMany?,f#,akka.net,akka.net-streams,F#,Akka.net,Akka.net Streams,我想创建一个流,用传入的元素创建一个新的源(它将是一个持久性查询),然后将结果展平。类似于此简化示例: var z=Source.Single(1).ConcatMany(i=>Source.Single(i)); 这段代码按照预期编译和工作。我的问题是当我把它翻译成F#: 让z=Source.Single(1.ConcatMany)(乐趣i->Source.Single(i)) 我听到一个错误说 This expression was expected to have type '
var z=Source.Single(1).ConcatMany(i=>Source.Single(i));
这段代码按照预期编译和工作。我的问题是当我把它翻译成F#:
让z=Source.Single(1.ConcatMany)(乐趣i->Source.Single(i))
我听到一个错误说
This expression was expected to have type
'IGraph<SourceShape<'a>,Akka.NotUsed>'
but here has type
'Source<int,Akka.NotUsed>'
此表达式应具有类型
'IGraph我发现的一个解决方法是使用包装器库:
打开Akkling.Streams
让x=
Source.singleton 1
|>Source.collectMap(乐趣x->Source.singleton x)
如何在没有Akkling的情况下执行此操作的问题仍然悬而未决。看看,似乎Source
是IGraph
的一个直接实现,因此您应该能够将其转换为:
公共密封类来源:IFlow,IGraph
让z=Source.Single(1).ConcatMany(乐趣i->Source.Single(i):>IGraph)
我认为C#和F#用法之间的最大区别在于C#会自动为您进行向上转换。这也适用于推断类型,如:let z=Source.Single(1).ConcatMany(fun I->Source.Single(I):>
您也可以使用F#upcast
。