Scala集合将var映射到另一个值

时间:2021-06-18 19:43:09

标签: scala

我有一个集合 col,其中包含类型为 Foo 的元素。

Foo 有一个 var bar,我需要为集合中的每个元素更改它。

目前我的代码是这样的

col.map(baz => {
  baz.bar = <something>
  baz
})

有没有更好的方法来做到这一点?我觉得这可以用一个衬垫来完成。

1 个答案:

答案 0 :(得分:4)

foreach 专为此类副作用而设计

col.foreach(_.bar = <something>)

在此 col 之后,所有元素都将发生变异。如果您希望避免 Unit 返回类型,请尝试链接

import util.chaining._
col.map(_.tap(_.bar = <something>))

或其他方式

col.tap(_.foreach(_.bar = <something>))

惯用的方法是避免 var 并具有不可变的案例类 Foo 然后 copy

col.map(_.copy(bar = <something>))