【发布时间】:2022-01-01 11:03:40
【问题描述】:
我正在学习 Scala 和函数编程及其不变性概念。
如果我的代码对这样的对象列表进行操作:
class Devices(
val devices_df: Dataset[Row],
){
private lazy val _devices = _initialize_list_of_devices()
def devices(): List[Device] = {
_devices
}
private[this] def _initialize_list_of_devices(): List[Device] = {
val devices_list = ListBuffer[Device]()
for (device <- devices_df.collect()) {
devices_list += new Device(
device.getAs[String]("DeviceName"),
)
}
devices_list.toList
}
}
然后我像这样初始化列表:
val devices_list = new Devices(devices_df).devices()
然后,我像这样更新列表中的对象:
for (device <- devices_list) {
device.modify_instance_properties()
}
代码有效,我可以修改列表中的对象。
但是,当我尝试使用以下内容将另一个对象添加到列表中时:
devices_list += new Device("append another device")
不管是val devices_list还是var devices_list都会失败。
我只是想理智地检查一下我没有误解事情,并想确认这些是真的:
- 不变性并不意味着列表中的对象不能被修改
- 对象似乎可以正常更新其属性
- 不变性确实意味着无法更改列表
- 我应该无法将另一个对象添加到列表中或从列表中删除现有对象
感谢您的宝贵时间和帮助????
【问题讨论】:
标签: list scala oop functional-programming immutability