gpt4 book ai didi

scala - IndexedSeq基于等价流的?

转载 作者:行者123 更新时间:2023-12-01 02:26:12 26 4
gpt4 key购买 nike

我有一个延迟计算的对象序列,其中延迟计算仅取决于索引(而不是前面的项目)和一些常量参数(下面的 p:Bar)。我目前正在使用 Stream ,但是计算 stream.init通常是浪费。

但是,我真的很喜欢使用 Stream[Foo] = ...让我摆脱了实现缓存,并且具有非常轻的声明语法,同时仍然提供所有糖(如 stream(n) 获取元素 n )。再说一次,我可能只是使用了错误的声明:

class FooSrcCache(p:Bar) {
val src : Stream[FooSrc] = {
def error() : FooSrc = FooSrc(0,p)
def loop(i: Int): Stream[FooSrc] = {
FooSrc(i,p) #:: loop(i + 1)
}
error() #:: loop(1)
}
def apply(max: Int) = src(max)
}

有没有 Stream - 可比较的基础 Scala 类,即索引而不是线性的?

最佳答案

PagedSeq应该为你做这项工作:

class FooSrcCache(p:Bar) {
private def fill(buf: Array[FooSrc], start: Int, end: Int) = {
for (i <- start until end) {
buf(i) = FooSrc(i,p)
}
end - start
}

val src = new PagedSeq[FooSrc](fill _)

def apply(max: Int) = src(max)
}

请注意,这可能会计算 FooSrc指数高于您的要求。

关于scala - IndexedSeq基于等价流的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16219864/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com