scala case类的返回类型是什么?

时间:2015-01-17 06:58:44

标签: scala

鉴于代码:

abstract class activity {
  case class Fun(sports: String, eat: String) extends activity

  val fun = Fun("soccer","apple")
}

有趣的回归类型是什么?

3 个答案:

答案 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