我有一个项目的 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
隐式参数