Scala中隐式参数中使用的各种类型的集合

时间:2014-06-25 13:45:43

标签: scala implicit

我有一个函数f(in:C *),它取一个类型为C的varargs列表。我希望能够为A => C和B => C提供隐含,然后是能够用As和Bs的混合物调用f():

object ImplicitSeq {  
case class A
case class B
case class C
implicit def a2c(a:A) : C = C()
implicit def b2c(b:B) : C = C()
def on_c[T<%C](in:T) = with_c(in)
def on_seq[T<%C](s:T*) = s map {with_c(_)}
def with_c(in:C) = println("Got C")

on_c(A())
on_seq(A(),A()) //Fine
on_seq(B(),B()) //Fine
on_seq(A(),B()) //Fails to compile
}

这取决于[T <%C]含义&#34;类型T,其可以转换为C&#34;这样

def on_c[ T <% C](in:T)

变     def on_cT(隐式ev:T =&gt; C)

对于单个对象可以正常工作,因为每次调用T时T都可以不同。但在序列中, Seq(A(),B())将具有Seq [AnyRef]类型,它不起作用。

我想知道是否有优雅的解决方法?相当于说Seq [_&lt;%C],意思是&#34; A seq of things可以变成Cs给出可用的含义&#34;?

0 个答案:

没有答案