scala - 不能用作模式中的提取器,因为它缺少 unapply 或 unapplySeq 方法
问题描述
我有一个非常简单的 Scala 代码,我想在其中应用模式匹配:
trait Expr
case class Number(n: Int) extends Expr
case class Sum(a: Expr, b: Expr) extends Expr
case class Prod(a: Expr, b: Expr) extends Expr
def eval(e: Expr): Int = e match
case Number(n) => n
case Sum(a, b) => eval(a) + eval(b)
case Prod(a, b) => eval(a) * eval(b)
但是当我运行代码时,错误上升:“数字不能用作模式中的提取器,因为它缺少 unapply 或 unapplySeq 方法”
我应该怎么做才能避免这个错误?谢谢
解决方案
您可能已java.lang.Number
在eval
定义范围内导入。
确保改为导入您的Number
定义(通过删除 Java 导入或重命名它,无论哪种方式最适合您的用例......)它会正常工作。
推荐阅读
- swift - SQLite 绑定文本值与检索到的文本值不同
- python - 如何优化此 Python 代码?
- php - 使用数据库登录 Symfony
- reactjs - 如何为 React Material UI 实现全局主题?
- javascript - javascript xmlhttprequest 总是获得状态 0
- c++ - c ++:为什么整数前面的减号信号会给出一个疯狂的数字?
- django - Django allauth 出错 is_safe_url() got an unexpected keyword argument 'allowed_hosts'
- c - STM32 VCP驱动——指针失效只有优化
- node.js - 列出应用的 sequelize 迁移
- python - 无法在 Windows 8.1 上安装 python-poppler-qt5