在scala,为什么';下限在这里不起作用吗?

在scala,为什么';下限在这里不起作用吗?,scala,generics,types,functional-programming,type-inference,Scala,Generics,Types,Functional Programming,Type Inference,这些代码编译得很好: abstract class CodeTree case class Fork(left: CodeTree, right: CodeTree, chars: List[Char], weight: Int) extends CodeTree case class Leaf(char: Char, weight: Int) extends CodeTree def weight(tree: CodeTree): Int = tree match {

这些代码编译得很好:

  abstract class CodeTree

  case class Fork(left: CodeTree, right: CodeTree, chars: List[Char], weight: Int) extends CodeTree

  case class Leaf(char: Char, weight: Int) extends CodeTree


  def weight(tree: CodeTree): Int = tree match {
    case Fork(left, right, chars, weight) => weight
    case Leaf(char, weight) => weight
  }

  def insert_orderedCodeTreeList[T >: CodeTree](leaf: CodeTree, orderedCodeTrees: List[CodeTree]): List[T] = orderedCodeTrees match {
    case Nil => List(leaf)
    case head :: tail => {
      if (weight(leaf) <= weight(head)) leaf :: orderedCodeTrees
      else head :: insert_orderedCodeTreeList(leaf, tail)
    }
  }
可以看出,类型参数
T
使用
CodeTree
作为下限,因此,我认为在
insert\u orderedCodeTreeList
的参数列表中,可以将CodeTree替换为
T

  def insert_orderedCodeTreeList[T >: CodeTree](leaf: T, orderedCodeTrees: List[T]): List[T] = orderedCodeTrees match {
    case Nil => List(leaf)
    case head :: tail => {
      if (weight(leaf) <= weight(head)) leaf :: orderedCodeTrees
      else head :: insert_orderedCodeTreeList(leaf, tail)
    }
  }
def insert\u orderedCodeTreeList[T>:CodeTree](叶:T,orderedCodeTrees:List[T]):List[T]=orderedCodeTrees匹配{
案例Nil=>列表(叶)
案例头部::尾部=>{
如果(重量(叶子)阅读后,我发现正确的方法是这样写:

insert_orderedCodeTreeList[Leaf](Leaf(theChar, theInt), makeOrderedLeafList(tail))

type arguments [patmat.Huffman.Leaf] do not conform to method insert_orderedCodeTreeList's type parameter bounds [T >: patmat.Huffman.CodeTree]
[error]     case (theChar, theInt) :: tail => insert_orderedCodeTreeList[Leaf](Leaf(theChar, theInt), makeOrderedLeafList(tail))
[error]                                                                 ^
[error] one error found
  def insert_orderedCodeTreeList[T <: CodeTree](leaf: T, orderedCodeTrees: List[T]): List[T] = orderedCodeTrees match {
    case Nil => List(leaf)
    case head :: tail => {
      if (weight(leaf) <= weight(head)) leaf :: orderedCodeTrees
      else head :: insert_orderedCodeTreeList(leaf, tail)
    }
  }
def insert_orderedCodeTreeList[T列表(叶)
案例头部::尾部=>{
if(叶重)
  def insert_orderedCodeTreeList[T <: CodeTree](leaf: T, orderedCodeTrees: List[T]): List[T] = orderedCodeTrees match {
    case Nil => List(leaf)
    case head :: tail => {
      if (weight(leaf) <= weight(head)) leaf :: orderedCodeTrees
      else head :: insert_orderedCodeTreeList(leaf, tail)
    }
  }