鉴于代码:
abstract class activity {
case class Fun(sports: String, eat: String) extends activity
val fun = Fun("soccer","apple")
}
有趣的回归类型是什么?
答案 0 :(得分:1)
fun
既不是函数也不是方法,因此它没有返回类型。 fun
的类型为Fun
。
答案 1 :(得分:0)
有趣。它是activity
类的递归依赖。类型应为Fun
。但是,如果您尝试实例化一些具体类并访问该成员:
abstract class activity {
case class Fun(sports: String,eat:String) extends activity
val fun = Fun("soccer","apple")
}
object Main extends App {
class concrete extends activity
val x = new concrete // StackOverflowError exception!
}
你得到StackOverflowError
例外。这是预期的行为吗?
答案 2 :(得分:0)
类型Fun
abstract class activity {
case class Fun(sports: String, eat: String) extends activity
val fun: Fun = Fun("soccer", "apple")
}
执行Fun("soccer", "apple")
时,它归结为Fun.apply("soccer", "apple")
并且案例类的默认apply
方法伴随对象返回该类的实例,因此它具有返回类型Fun
。