Scala 案例类:公共 var 成员可能吗?

问题描述 投票:0回答:1

Scala 菜鸟,但是在学习

case
类时,我看到成员默认是只读的。但是,如果您添加
var
,它们就会变为私有;并且没有
public
访问修饰符。有什么方法可以拥有一个带有公共
case
var
类,您可以直接修改它吗? 我知道这可能不是
case
类的用途,但我仍然想知道(因为拥有
var
成员本身是可能的)。

scala var access-modifiers case-class
1个回答
0
投票

我认为 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
是否更适合您的用例。

© www.soinside.com 2019 - 2024. All rights reserved.