我有一些代码
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)
好吧,你不能调用"静态"变量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)
| 归档时间: |
|
| 查看次数: |
4046 次 |
| 最近记录: |