在 Scala 中设置多个对象属性?
Setting multiple object attributes in Scala?
我不太确定它的正确名称是什么,但是在 Scala 中有没有办法同时 setting/changing 多个对象的属性? (对象已经初始化)
我正在寻找类似的东西:
sampleObject.{
name = "bob",
quantity = 5
}
相对于:
sampleObject.name = "bob"
sampleObject.quantity = 5
Scala 有这样的功能吗? (正确的说法是什么?)
据我所知,没有这样的语法,我认为这是一个很好的理由。在 Scala 中,非常不鼓励使用这样的可变属性。 classes 存在类似的功能,但以不可变的方式存在。所有 case classes 都带有一个 copy
方法,允许您复制 class 实例,同时仅更改您指定的字段。
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)
在某种程度上,确实存在这样的事情。老实说,恕我直言,如其他答案所述,使用 case class copy
方法更可取。但是 Scala 有办法将对象的成员带入作用域,如本 REPL 会话所示:
scala> object sampleObject {
| var name = "fred"
| var quantity = 1
| }
defined object sampleObject
scala> { import sampleObject._
| name = "bob"
| quantity = 5
| }
我不太确定它的正确名称是什么,但是在 Scala 中有没有办法同时 setting/changing 多个对象的属性? (对象已经初始化)
我正在寻找类似的东西:
sampleObject.{
name = "bob",
quantity = 5
}
相对于:
sampleObject.name = "bob"
sampleObject.quantity = 5
Scala 有这样的功能吗? (正确的说法是什么?)
据我所知,没有这样的语法,我认为这是一个很好的理由。在 Scala 中,非常不鼓励使用这样的可变属性。 classes 存在类似的功能,但以不可变的方式存在。所有 case classes 都带有一个 copy
方法,允许您复制 class 实例,同时仅更改您指定的字段。
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)
在某种程度上,确实存在这样的事情。老实说,恕我直言,如其他答案所述,使用 case class copy
方法更可取。但是 Scala 有办法将对象的成员带入作用域,如本 REPL 会话所示:
scala> object sampleObject {
| var name = "fred"
| var quantity = 1
| }
defined object sampleObject
scala> { import sampleObject._
| name = "bob"
| quantity = 5
| }