我试图用非常通用的类型参数参数化一些方法.
举个例子,我在REPL中首先定义:
trait Term
case class FunctionalTerm[+T <: Term](t: T) extends Term
Run Code Online (Sandbox Code Playgroud)
直观地说,下面的方法采用Term和FunctionalTerm,并返回类型为传递的术语类型的最小上限和FunctionalTerm的参数类型的东西:
def ex1[T1 <: Term, T3 <: X, FunctionalTerm[T1] <: X, X <: R, R <: Term](t1: FunctionalTerm[T1], s: T3): R = sys.error("TODO")
Run Code Online (Sandbox Code Playgroud)
REPL到目前为止一直很好.
然后我定义ex2为一个方便函数,执行相同的操作ex1,但交换输入参数:
def ex2[T2 <: Term, T3 <: X, FunctionalTerm[T2] <: X, X <: R, R <: Term](s: T3, t2: FunctionalTerm[T2]): R = ex1(t2,s)
Run Code Online (Sandbox Code Playgroud)
尝试ex2在REPL中定义会出现以下错误:
error: inferred type arguments [T2,T3,FunctionalTerm,T3,T3] do not conform to method ex1's type parameter bounds …Run Code Online (Sandbox Code Playgroud)