Scala Return 摘要 class
Scala Return abstract class
就像在 Java 中一样,我可以访问 scala 中子项的新参数,为什么我没有访问权限?
abstract class superclass
class class1(c: Int) extends superclass
class class2(a: String) extends superclass
def foo(i: Int): superclass ={
if(i == 1){
return new class1(1)
}
else {
return new class2("as")
}
}
val cla = foo(1)
cla.c ??
我该如何解决这个问题?
这里最大的问题是 class1
首先没有成员 c
所以即使这样也行不通:
val c1 = new class1(3)
c1.c // Error: value c is not a member of class1
c
是构造函数的参数,但不是成员。
您可以通过将其设为 case class 来解决此问题,这确实使构造函数参数成为成员:
case class class1(c: Int) extends superclass
修复此问题后,您仍然无法从 superclass
的实例访问成员 c
,因为 superclass
没有名为 c
的成员。 Java 就像 Scala 一样。所以不能直接访问foo
的结果的成员c
。
但是您可以使用 match
计算出 superclass
的哪个子 class 被返回,像这样:
val cla = foo(1)
cla match {
case class1(c) =>
println(s"It is class1, c = $c")
case class2(a) =>
println(s"It is class2, a is $a")
case _ =>
println("It is some other class")
}
这将打印 "It is class1, c = 1",而将 foo(1)
更改为 foo(2)
将打印 "It is class2, a is as".
其他问题:Class 名称应以大写字母开头(不需要,但 match
会与小写 class 名称混淆),并且 return
关键字不是必需的,并不总是按照您预期的方式运行。
就像在 Java 中一样,我可以访问 scala 中子项的新参数,为什么我没有访问权限?
abstract class superclass
class class1(c: Int) extends superclass
class class2(a: String) extends superclass
def foo(i: Int): superclass ={
if(i == 1){
return new class1(1)
}
else {
return new class2("as")
}
}
val cla = foo(1)
cla.c ??
我该如何解决这个问题?
这里最大的问题是 class1
首先没有成员 c
所以即使这样也行不通:
val c1 = new class1(3)
c1.c // Error: value c is not a member of class1
c
是构造函数的参数,但不是成员。
您可以通过将其设为 case class 来解决此问题,这确实使构造函数参数成为成员:
case class class1(c: Int) extends superclass
修复此问题后,您仍然无法从 superclass
的实例访问成员 c
,因为 superclass
没有名为 c
的成员。 Java 就像 Scala 一样。所以不能直接访问foo
的结果的成员c
。
但是您可以使用 match
计算出 superclass
的哪个子 class 被返回,像这样:
val cla = foo(1)
cla match {
case class1(c) =>
println(s"It is class1, c = $c")
case class2(a) =>
println(s"It is class2, a is $a")
case _ =>
println("It is some other class")
}
这将打印 "It is class1, c = 1",而将 foo(1)
更改为 foo(2)
将打印 "It is class2, a is as".
其他问题:Class 名称应以大写字母开头(不需要,但 match
会与小写 class 名称混淆),并且 return
关键字不是必需的,并不总是按照您预期的方式运行。