理解 unapply 没有案例 class

understanding unapply without case class

我正在尝试下面的例子来理解 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 class 时,它工作得很好,没有任何编译错误。

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

注意:scalaVersion- 2.12.7

错误告诉你,scala 看不到 class Emp 中的属性。为了暴露它们,你需要这样的东西(here 中有更多内容):

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

另外,Some只接受一个参数,所以你需要return一对:

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