没有案例分类就无法理解

时间:2018-12-10 17:06:47

标签: scala unapply

我正在尝试通过以下示例来了解unapply

class Emp(name: String, age: Int)

object Emp {
  def apply(name: String, age: Int): Emp = new Emp(name, age)

  def unapply(emp: Emp): Option[(String, Int)] = Some(emp.name, emp.age)
}

不幸的是,它失败,并出现编译错误Cannot resolve symbol nameCannot resolve symbol age

因此,当我将Emp声明为case类时,它可以正常工作而没有任何编译错误。

有人可以解释这背后的原因吗?

注意:scalaVersion- 2.12.7

1 个答案:

答案 0 :(得分:5)

该错误告诉您,scala无法看到类Emp中的属性。为了暴露它们,您需要像这样的东西(here中的更多信息):

class Emp(val name: String, val age: Int)

此外,Some仅接受一个参数,因此您需要返回一个对:

Some((emp.name, emp.age))