小编And*_*ate的帖子

Scala类型:最小上限

我试图用非常通用的类型参数参数化一些方法.

举个例子,我在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)

polymorphism types scala subtype type-parameter

6
推荐指数
1
解决办法
792
查看次数

标签 统计

polymorphism ×1

scala ×1

subtype ×1

type-parameter ×1

types ×1