我有许多City
个对象的列表,在创建后的某个时刻,它们会被标记,因此每个对象都会设置一个Label
字段。
我希望以功能无状态的方式执行此操作,即不设置默认值并使用var
。我真的很好奇最佳做法是什么。
我有这个工作的例子,但我觉得很有趣。请特别注意,我import
- 现有的City
个对象,当我拨打City.addLabel(label)
时会发生这种情况。
case class LabelledCity(importCity: CityLike, label: Label) extends CityLike with Labelled
{
val cityState = importCity.cityState
val income = importCity.income
}
case class City(string: String) extends CityLike {
val split = string.split(" --- ")
val cityState = split(0)
val income = split(1).toInt
}
abstract class CityLike {
def addLabel(l: Label): LabelledCity = { new LabelledCity(this, l) }
val cityState: String
val income: Int
}
这一切都有点不对劲,或者说我错过了一些简单的事情......是吗?
答案 0 :(得分:4)
以下是存档的不可变方法(为了简单起见,我删除了类主体):
case class City(string: String, label: Option[String] = None)
val unknown = City("somestring")
// unknown: City = City(somestring,None)
val washington = unknown.copy(label = Some("Washington"))
// washington: City = City(somestring,Some(Washington))