如何在Scala中与其他对象一起扩展对象属性?

时间:2019-01-11 10:04:43

标签: scala

我是Scala的新手,它如何从另一个对象扩展一个属性值。像成角度的angular.copy(obj1, obj2);

如果我有两个对象,obj1obj2,都具有相同的属性名称。 obj2的值将被覆盖为obj1

如何在Scala中实现这一目标?

2 个答案:

答案 0 :(得分:3)

与JavaScript不同,Scala不允许您向现有对象添加新属性。使用特定的 type 创建对象,并且该类型定义对象的属性。如果您的对象以case class的形式实现,则很容易复制对象:

val obj = obj1.copy()

您还可以在复制期间更新obj1的某些字段,而保留其他字段不变:

val obj = obj1.copy(count=obj2.count)

这将创建一个具有与obj1相同的所有值的新对象,但字段count将从obj2中获取值。

在注释中已经指出,在Scala中,您通常会从旧对象创建新对象,而不是修改现有对象。乍一看似乎很麻烦,但是它使理解更复杂代码的行为变得容易得多,因为您知道对象不会在脚下改变。

答案 1 :(得分:0)

关于Scala与JS中的process_logout()的说明

请注意,Scala中的object与Javascript中的用法完全不同。 Scala故意不使用Prototype基础继承。 简而言之,这不是语言的mssing功能,这是不可能的。

请参阅https://docs.scala-lang.org/tour/singleton-objects.html

解决方案:使用地图模拟原型库的继承/组成

您可以使用地图实现类似的行为:

object