我是Scala的新手,它如何从另一个对象扩展一个属性值。像成角度的angular.copy(obj1, obj2);
如果我有两个对象,obj1
,obj2
,都具有相同的属性名称。 obj2
的值将被覆盖为obj1
。
如何在Scala中实现这一目标?
答案 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)
process_logout()
的说明请注意,Scala中的object
与Javascript中的用法完全不同。
Scala故意不使用Prototype基础继承。
简而言之,这不是语言的mssing功能,这是不可能的。
请参阅https://docs.scala-lang.org/tour/singleton-objects.html
您可以使用地图实现类似的行为:
object