首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >隐式替换

隐式替换
EN

Stack Overflow用户
提问于 2017-08-08 22:39:42
回答 1查看 64关注 0票数 1

我有几种类型:

代码语言:javascript
复制
trait OutputHandler[A]

case class TypeA()

case class TypeB()

接受隐式参数的方法:

代码语言:javascript
复制
def process[A](a: Any => A)(implicit handler: OutputHandler[A]) {}

定义为:

代码语言:javascript
复制
implicit val handler = new OutputHandler[TypeA] {}

T可以是任何定义了隐式值的类型的情况下,如何创建List[T]的泛型隐式值?也就是说,每当我有implicit val a: OutputHandler[TypeA]时,我是否可以调用process(List(TypeA()))process(List(TypeB()),等等?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-09 00:13:36

您可以通过返回OutputHandler[List[A]]implicit def来实现这一点

代码语言:javascript
复制
implicit val handler = new OutputHandler[TypeA] {}

implicit def listOf[A](implicit ev: OutputHandler[A]): OutputHandler[List[A]] = new OutputHandler[List[A]] {
  // can implement this output handler using ev: OutputHandler[A]
}

process(t => List(TypeA())) // compiles, because OutputHandler[TypeA] exists
process(t => List(TypeB())) // does not compile, as expected, because there's no OutputHandler[TypeB]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45571323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档