如何使Scala列表的内容隐式可用

  • 本文关键字:何使 Scala 列表 scala implicit
  • 更新时间 :
  • 英文 :


我有一个项目的 List(在这种情况下为喷雾架),我想在当前上下文中隐式可用。只是为了澄清:我不希望List本身隐式可用,而希望列表的每个元素。有人有窍门吗?还是由于必须在编译时可用的确切隐含性吗?

,这实际上是不可能的。

在这种特殊情况下,如果我正确理解的话,您需要在上下文中使用所有特定的骑士,因此您需要隐式地提供它们。

您应该将它们放入对象中并将它们定义为隐式值。

object Protocol {
  implicit val marshaller1: ...
  implicit val marshaller2: ...
}

然后,通过导入Protocol对象,您将隐含所有的编组。

,要回答您的问题,是的,在编译时隐含了隐含的问题。因此,只要您需要使用特定的邮政乐人,隐式分辨率算法就会寻找特定货架类型的value。这就是为什么您不能从列表中获取它的原因,例如,您都不需要这种方式。

您当然可以通过无形:

实现这一目标
import shapeless._
import shapeless.ops.hlist.Selector
case class A()
case class B()
case class C()
val list : A :: B :: C :: HNil = A() :: B() :: C() :: HNil
def screamIfAccessible[T](implicit selector: Selector[A :: B :: C :: HNil ,T]) = {
  selector(list) // Actually picks the T type element 
                 // from the HList to work with
  println("YAY!")
}
screamIfAccessible[A]
screamIfAccessible[B]

无形 - 带有scala的通用编程

您代码中需要从列表中访问A类型元素的任何方法(或在这种情况下为HLIST)都需要具有Selector隐式参数

相关内容

  • 没有找到相关文章

最新更新