【问题标题】:Is there a data structure like stream, but weak?有没有像流一样的数据结构,但是很弱?
【发布时间】:2011-03-28 14:59:50
【问题描述】:

弱引用。基本上,我需要一个数字序列,其中一些在不再需要时可以取消分配。

【问题讨论】:

  • 你应该庆幸自己没有弱流(抱歉,无法抗拒)
  • @Sciss 抱歉,我搜索时找不到任何东西……嗯,有时会发生这种情况,对吧?

标签: list scala stream


【解决方案1】:

scalaz.EphemeralStream 是你想要的。

【讨论】:

    【解决方案2】:

    视图为您提供了一个惰性集合,其中每个值都根据需要进行计算。

    【讨论】:

    • 是的。我已经有一个惰性集合(Stream),但我也需要它是弱的。
    • 问题的重点......明白了!谢谢。我会在这里留下我的答案,让其他人看到这些 cmets。有人能解释一下为什么视图不弱吗?
    • 区别在于视图根本不缓存计算元素,而弱流将缓存其元素,直到它们被垃圾回收。
    【解决方案3】:

    您可以做的一件事是创建一个Iterable 而不是Stream。你的Iterable 需要提供一个iterator 方法,它返回一个带有hasNextnext 方法的迭代器。

    当您遍历 Iterable 时,hasNextnext 将被调用以根据需要生成元素,但它们不会存储在任何地方(就像 Stream 那样)。

    简单示例:

    class Numbers extends Iterable[Int] {
      def iterator = new Iterator[Int] {
        private var num = -1
    
        def hasNext = num < 99
        def next = { num += 1; num }
      }
    }
    

    【讨论】:

    • 这没有多大帮助,因为我需要一个流有两个原因:函数式编程(= 不是迭代器)和记忆化(不是迭代器)。
    • @Anonymous - 请注意 Iterable 拥有大多数 Scala 收集方法(包括 foreachmapfilterfoldLeft 等),因此您可以将其用于 func 编程,就像任何其他集合和记忆:我以为你想要的东西保留生成的值?
    • 它应该保留它们,只是不是永久的。看看(我认为)java.lang.ref.WeakReference。
    猜你喜欢
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2013-02-17
    相关资源
    最近更新 更多