scala - 没有案例类的理解不适用
问题描述
我正在尝试下面的例子来理解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
解决方案
错误告诉你,scala 看不到 class 中的属性Emp
。为了暴露它们,你需要这样的东西(更多关于这个在这里):
class Emp(val name: String, val age: Int)
此外,Some
只接受一个参数,因此您需要返回一对:
Some((emp.name, emp.age))
推荐阅读
- node.js - Node.js 未部署在 Heroku 上
- python-2.7 - 如何在 python 回归中修复“TypeError:只有长度为 1 的数组可以转换为 Python 标量”
- nlp - StringToWordVector Weka 输出
- javascript - 如何使用 knex.js 防止种子在生产环境中运行?
- variables - 锁定变量与信号量
- databricks - 如何重定向日志但保留现有的 stdout、stderr 和 log4j 日志?
- java - insertable=false 将 null 放入我的值,但 true 给出错误(多对多关系)
- kotlin - Kotlin:如何创建一个可运行的 jar?
- python - 使用 python 在 Google BigQuery 中进行多个 UPDATE 查询
- django - 将模型对象从视图集中传递给函数