Scala 菜鸟,但是在学习
case
类时,我看到成员默认是只读的。但是,如果您添加 var
,它们就会变为私有;并且没有 public
访问修饰符。有什么方法可以拥有一个带有公共 case
的 var
类,您可以直接修改它吗?
我知道这可能不是 case
类的用途,但我仍然想知道(因为拥有 var
成员本身是可能的)。
我认为 Scala 的语法可能会得出错误的结论:您没有
public
限定符的事实是因为 public
是 Scala 中的默认设置,并且您必须明确选择使用 private
或一些范围内的变化。
以下代码演示了
var
中的 case class
可以访问并且按预期工作:
case class Foo(var mutable: Int)
val foo = Foo(42)
foo.mutable = 47
assert(foo == Foo(47))
您可以在 Scastie 上使用此代码。
请注意,如果您显式地将
mutable
字段显式设置为 private
,则代码将不再编译:
case class Foo(private var mutable: Int)
val foo = Foo(42)
foo.mutable = 47
assert(foo == Foo(47))
上面的代码将导致以下编译时错误:
variable mutable cannot be accessed as a member of ...
(同样,您可以在here看到实际情况)。
话虽如此,
case class
通常意味着表示不可变数据。在此过程中,他们引入了一些您可能不需要或可能会妨碍的合成方法(例如 copy
方法)。如果您想表示可变数据,您可能想看看简单的 class
是否更适合您的用例。