scala - 使用 ClassTag 时“缺少实现”
问题描述
我正在尝试实现以下特征:
trait Monad[M[_]] {
def pure[A](a: A): M[A]
def flatMap[A, B](ma: M[A], f: A => M[B]): M[B]
}
对于类型数组:
def arrayMonad: Monad[Array] = new Monad[Array] {
def pure[A](a: A): Array[A] = Array(a)
def flatMap[A, B](a: Array[A], f: A => Array[B]): Array[B] = a flatMap f
}
编译器抱怨 A 和 B 没有 ClassTag。如果我添加它们(使用隐式参数或“[A: ClassTag]”样式),我被告知我缺少实现:
Missing implementations for 2 members. Stub implementations follow:
def flatMap[A, B](ma: Array[A], f: A => Array[B]): Array[B] = ???
def pure[A](a: A): Array[A] = ???
我可能缺少一些明显的东西,但我不确定它是什么。
解决方案
如果您添加它们,那么您将更改签名并且不再覆盖原始方法(添加override
并且您将看到“overrides nothing”错误)。
您根本无法Monad[Array]
实现Monad
.
推荐阅读
- javascript - Javascript 测试引用相同的对象数组,即使我在每次测试之前都将其清空
- google-maps - 如何使用 google place API 仅获取没有国家/地区的城市名称
- sql - Postgresql中根据条件获取上一条记录
- node.js - 护照认证后无法获取任何视图
- python-3.x - 基于匹配的 XML 删除标签
- javascript - 如何从解析服务器获取父母及其孩子的条目?
- microsoft-cognitive - 将人脸数据从一个人组复制到另一个人组
- ruby-on-rails - 为 Ruby 应用程序迁移 Azure 数据库的问题
- scala - 这段带有嵌套期货的代码会造成死锁吗?
- go - 使用反射调用结构方法