【发布时间】:2016-05-09 09:57:35
【问题描述】:
我正在实现一个类来限制对可迭代对象的访问。序列的中间步骤(在一些地图等之后)预计对于内存来说太大了。因此 map(以及类似的东西:scanLeft、reduce、...)应该是惰性的。
在内部我使用map(...) = iterable.view.map( ... )。但似乎IterableView.view 不是它自己,它在多次调用 map 时会产生无用的重定向。这可能并不重要,但我想调用.view 仅当可迭代对象还不是视图时。
那么,如何对视图进行大小写匹配?
class LazyIterable[A](iterable: Iterable[A]){
def map[B](f: A => B) = {
val mapped = iterable match {
case v: View[A] => v // what should be here?
case i: Iterable[A] => i.view
}.map( f ))
new LazyIterable(mapped)
}
def compute() = iterable.toList
}
请注意,我不知道输入的 Iterable 是什么,具体的 Seq(例如 List、Vector)或 View。如果是视图,我不知道具体的 seq 类型(例如 InterableView、SeqView、...)。我迷失在 View 和 ViewLike 的类层次结构中。
【问题讨论】:
-
view在这里不是一个合适的标签(它指的是数据库的东西)。我应该为转换后的具体数据添加什么“虚拟”视图?
标签: scala view pattern-matching