访问案例类的静态成员

Jus*_*s12 0 scala

我有一些代码

case class A(s:String) {val x = "hello"}
Run Code Online (Sandbox Code Playgroud)

为什么我不能在x没有实例化A类的情况下访问静态变量?如果我输入

A.x
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

error: value x is not a member of object A
Run Code Online (Sandbox Code Playgroud)

编辑:

我错过了提到剩下的代码.这是我想要使用的示例:

abstract class A { val name:String }
case class B(i:Int) extends A { val name = "B" }
case class C(b:Boolean) extends A { val name = "C" }
def getType(s:String) = s match {
  case B.name => println ("Object B")
  case C.name => println ("Object C")
}
Run Code Online (Sandbox Code Playgroud)

错误:

  scala> def getType(s:String) = s match {
 |       case B.name => println ("Object B")
 |       case C.name => println ("Object C")
 |     }
 <console>:11: error: value name is not a member of object B
         case B.name => println ("Object B")
                ^
 <console>:12: error: value name is not a member of object C
         case C.name => println ("Object C")
                ^
Run Code Online (Sandbox Code Playgroud)

至于为什么使用case类,没有为此目的定义case类.在其他地方,我有一些代码,如:

def func(a:A) = a match {
  case b:B =>
  case c:C =>
  ...
}
Run Code Online (Sandbox Code Playgroud)

Rue*_*ler 5

好吧,你不能调用"静态"变量x,因为在Scala中没有静态变量.您声明x是A类的常规成员,如果您有A类实例,则可以访问该成员.

您通过调用Axs尝试执行的操作是访问名为"A"的值.在范围内恰好有这样的值 - 编译器为您的案例类A生成了伴随对象.

但是这个对象A没有成员"x",因此编译器正确地抱怨它.

您可以通过执行以下操作将值x添加到对象A而不是类/类型A:

case class A(s:String)
object A { val x = "hello" }
Run Code Online (Sandbox Code Playgroud)