我正在尝试通过以下示例来了解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 name
,Cannot resolve symbol age
。
因此,当我将Emp
声明为case
类时,它可以正常工作而没有任何编译错误。
有人可以解释这背后的原因吗?
注意:scalaVersion- 2.12.7
答案 0 :(得分:5)
该错误告诉您,scala无法看到类Emp
中的属性。为了暴露它们,您需要像这样的东西(here中的更多信息):
class Emp(val name: String, val age: Int)
此外,Some
仅接受一个参数,因此您需要返回一个对:
Some((emp.name, emp.age))