yield - 使用先前存储在列表 [Scala] 中的元素

yield - using element stored previously in list [Scala]

我会给出一个简化的代码来轻松解释我的问题:

如何在 yield 中为我的数据列表中的下一个元素使用这个新的 returned 值,以便我可以为列表中的下一个元素保持最新的余额?

for(elem <- dataList) yield (interest(elem, newBalanceFromPreviousYield))

我想,没有什么简单的方法可以只用 yield 来使用它。您的用例提醒折叠模式,所以,让我们使用它。我们累积余额并在 interest() 调用中使用它:

dataList.foldLeft(List.empty[Int]) { (acc, elem) =>
  acc match {
    case Nil =>
      // if no balances accumulated yet, use default balance = 10
      List(interest(elem, balance))
    case all@newBalance :: _ =>
      // else use accumulated balance
      interest(elem, newBalance) :: all
  }
}.reverse // we need to reverse result list due to :: usage

我不太确定你最后想得到什么结果的问题:只是最终余额还是每个元素的余额列表?假设后一个(因为这是 for/yield 应用于列表的结果类型),scan 操作是你需要的:

dataList.scanLeft(10)((acc, currentElem) => interest(currentElem, acc)).tail