我不太确定这个名称的正确名称是什么,但是有没有办法在Scala中同时设置/更改多个对象的属性? (对象已经初始化的地方)
我正在寻找那种东西:
sampleObject.{
name = "bob",
quantity = 5
}
而不是:
sampleObject.name = "bob"
sampleObject.quantity = 5
Scala有没有这样的功能? (它的正确用语是什么?)
答案 0 :(得分:5)
没有我所知道的这种语法,我认为这是一个很好的理由。在Scala中,使用像这样的可变属性是非常不鼓励的。对于案例类,存在这样的特征,但是以不可变的方式存在。所有案例类都附带copy
方法,允许您复制类实例,同时仅更改指定的字段。
case class Sample(name: String, quantity: Int, other: String)
scala> val sample = Sample("Joe", 2, "something")
sample: Sample = Sample(Joe,2,something)
scala> val sampleCopy = sample.copy(
name = "bob",
quantity = 5
)
sampleCopy: Sample = Sample(bob,5,something)
答案 1 :(得分:1)
在某种程度上存在这样的事情。老实说,使用案例类copy
方法是优选的,imho,如其他答案中所述。但是Scala有一种方法可以将对象的成员带入范围,例如REPL会话中所示:
scala> object sampleObject {
| var name = "fred"
| var quantity = 1
| }
defined object sampleObject
scala> { import sampleObject._
| name = "bob"
| quantity = 5
| }