代码之家  ›  专栏  ›  技术社区  ›  vkubicki

Scala流迭代和内存管理

  •  1
  • vkubicki  · 技术社区  · 7 年前

    val res = Stream // launch the real computation, which alternates E and M steps, updating the computation state
      .iterate(initCompState)(Base.emIteration)
      .take(nIteration)
      .last
    

    其目的是提供初始状态 initCompState ,一个从上一个状态生成新状态的函数,运行此函数 nIterations

    我不是中间州的人,我希望他们在不需要的时候尽快被垃圾收集。从我在网上看到的情况来看, Stream

    我的实现是否正确,以及 res

    1 回复  |  直到 7 年前
        1
  •  0
  •   Dima    7 年前

    Stream IterableAgain ,这意味着它将保留您迭代的所有元素,以防您想再次看到它们。

    Iterator last 不过,所以,你必须自己实现它,比如

     iterator.foldLeft(Option.empty[Int])((_, n) => Some(n))
    

    或者,只需递归地实现迭代:

     @tailrec
     def iterate(iters: Int, state: State = initCompState): State = if(iters == 0)
       state 
     else 
       iterate(iters - 1, Base.emIteration(state))
    
     val result = iterate(nIteration)