我想编写一个int
-returning函数,它接受一个带零参数的闭包,一个带一个参数的闭包,一个带两个参数的闭包,其中所有闭包参数都是类型int
,每个闭包返回f32
.
这个函数的签名是什么样的?
现在我想接受通过Fn
和FnMut
特征.签名是什么样的?是否需要使用箱子中的功能?如果是这样,哪些是为什么?
如果知道:它看起来像糖?脱?
如果知道:未来可能会发生什么变化?
如果这是重复的道歉 - 我做了一些搜索,并没有找到我需要的东西.
我们的应用程序具有性能关键部分,可将Play 2.0 Enumerator
(可被视为a Stream
)转换为List
(或类似).我们将使用该fold
方法,Enumerator
问题是最有效的方法.(我将使用Stream
而不是Enumerator
代码,但想法应该是相同的.)
val incoming: Stream[Int] = ???
val result: Seq[Int] = incoming.fold(Seq.empty)(_ + _)
val result2: Seq[Int] = incoming.fold(MutableList.empty(_ += _).toSeq
Run Code Online (Sandbox Code Playgroud)
所以问题基本上是,如何重复附加到一个不可变的Vector
比较,反复附加到一个可变的MutableList
或ListBuffer
性能关键代码?我们之所以被抛弃只是List
因为我们需要O(1)
追加(而不是前置).但是,可变数据结构是否在性能或垃圾收集方面为我们带来了任何东西?