首页 > 解决方案 > 没有案例类的理解不适用

问题描述

我正在尝试下面的例子来理解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.

然而,当我声明Empcase类时,它工作得非常好,没有任何编译错误。

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

注意:scalaVersion- 2.12.7

标签: scalaunapply

解决方案


错误告诉你,scala 看不到 class 中的属性Emp。为了暴露它们,你需要这样的东西(更多关于这个在这里):

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

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

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

推荐阅读