给出一些方法
def f[A,B](p: A)(implicit a: X[A,B],b: Y[B])
隐式参数列表中前缀b的顺序对类型推断是否重要?
我认为只有不同参数列表中的参数放置很重要,例如类型信息仅从左到右通过参数列表流动.
我问,因为我注意到在单隐式列表中更改隐式参数的顺序使得我的程序编译.
真实的例子
以下代码使用:
>无形2.1.0
> Scala 2.11.5
scalaVersion := "2.11.5" libraryDependencies += "com.chuusai" %% "shapeless" % "2.1.0" scalaSource in Compile := baseDirectory.value
import shapeless._ import shapeless.ops.hlist.Comapped class Foo { trait NN trait Node[X] extends NN object computation { def foo[LN <: HList,N <: HList,TupN <: Product,FunDT] (dependencies: TupN) (computation: FunDT) (implicit tupToHlist: Generic.Aux[TupN,LN],unwrap: Comapped.Aux[LN,Node,N]) = ??? // (implicit unwrap: Comapped.Aux[LN,N],tupToHlist: Generic.Aux[TupN,LN]) = ??? val ni: Node[Int] = ??? val ns: Node[String] = ??? val x = foo((ni,ns))((i: Int,s: String) => s + i.toString) } }
这段代码失败了
import shapeless._ import shapeless.ops.hlist.Comapped class Foo { trait NN trait Node[X] extends NN object computation { def foo[LN <: HList,FunDT] (dependencies: TupN) (computation: FunDT) // (implicit tupToHlist: Generic.Aux[TupN,N]) = ??? (implicit unwrap: Comapped.Aux[LN,s: String) => s + i.toString) } }
出现以下编译错误
Error:(22,25) ambiguous implicit values: both method hnilComapped in object Comapped of type [F[_]]=> shapeless.ops.hlist.Comapped.Aux[shapeless.HNil,F,shapeless.HNil] and method hlistComapped in object Comapped of type [H,T <: shapeless.HList,F[_]](implicit mt: shapeless.ops.hlist.Comapped[T,F])shapeless.ops.hlist.Comapped.Aux[shapeless.::[F[H],T],shapeless.::[H,mt.Out]] match expected type shapeless.ops.hlist.Comapped.Aux[LN,Foo.this.Node,N] val x = foo((ni,s: String) => s + i.toString) ^ Error:(22,25) Could not find implicit value for parameter unwrap: shapeless.ops.hlist.Comapped.Aux[LN,25) not enough arguments for method foo: (implicit unwrap: shapeless.ops.hlist.Comapped.Aux[LN,implicit tupToHlist: shapeless.Generic.Aux[(Foo.this.Node[Int],Foo.this.Node[String]),LN])nothing. Unspecified value parameters unwrap,tupToHlist. val x = foo((ni,s: String) => s + i.toString) ^
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。