Atualize o valor da propriedade do objeto imutável enquanto mantém a imutabilidade

Digamos que temos uma classe de caso Item com algumas propriedades

case class Item(name:String, category:String, price:Double)

Em um determinado ponto do ciclo de vida do seu aplicativo, você pode precisar ‘atualizar’ uma das propriedades de uma instância desta classe de caso. Digamos, por exemplo, que precisamos atualizar a propriedade ‘preço’. No entanto, o objeto Item é imutável. Claro que você pode mudar isso:

case class Item(name:String, description:String, var price:Double)

No entanto, isso não é muito bom imho. Em vez disso, as classes de caso Scala nos permitem clonar o objeto e alterar seletivamente os valores das propriedades usando o método de cópia. Por exemplo:

val items = List(Item("Apple","Fruit", 1.50),Item("Pear", "Fruit", 2.00))
val items_on_sale
= items.map(_.copy(price = 0.50))

Isso torna muito fácil fazer pequenas transformações em seus objetos, mantendo a imutabilidade