【发布时间】:2015-11-01 07:13:18
【问题描述】:
我简化了 Scala 类型推断的问题:
case class HalfEdg[N,E](e:E, n:N)
case class Nod[N,E](head:N, edgs:HalfEdg[N,E])
case class AA[E](e:E) {
def ->[N](n:N):HalfEdg[N,E] = HalfEdg(e,n)
}
def --[E](e:E):AA[E] = AA(e)
我可以制作这个变量:
val x = Nod[Int,String](13, --("aa")->(12))
然后我想将它扩展到以下类型:
case class Foo[N](e:N => Boolean)
case class Bar[E](e:E => Boolean)
case class BB[E](e:Bar[E]) {
def ->[N](n:Foo[N]):HalfEdg[Foo[N],Bar[E]] = HalfEdg(e,n)
}
def --?[E](e:E => Boolean):BB[E] = BB(Bar(e))
但这次我不能做同样的事情,因为编译器无法推断 Foo 和 Bar 中的函数类型:(我可以静态键入它们并编译)
val x1 = Nod[Foo[Int],Bar[String]](Foo(x => x == 10), --?(x => x == "")->(Foo(z => z == 10)))
我该如何解决这个问题?
【问题讨论】: