Scala 找不到参数排序的隐式值
我在尝试编译此文件时遇到以下错误: Btree.scala:9:错误:找不到参数排序的隐式值:排序[K] 抽象类节点[K,V]扩展了树映射[K,V] TreeMap应该接受我提供的隐式排序[A]val。也许隐式参数需要在实例化Btree(TreeMap)的ObjectTester中? 我更愿意将隐式声明保留在Btree类中,因为我希望排序时有一个实现可比较[K]的类型K。有道理吗Scala 找不到参数排序的隐式值,scala,scala-2.8,implicit-conversion,type-parameter,implicits,Scala,Scala 2.8,Implicit Conversion,Type Parameter,Implicits,我在尝试编译此文件时遇到以下错误: Btree.scala:9:错误:找不到参数排序的隐式值:排序[K] 抽象类节点[K,V]扩展了树映射[K,V] TreeMap应该接受我提供的隐式排序[A]val。也许隐式参数需要在实例化Btree(TreeMap)的ObjectTester中? 我更愿意将隐式声明保留在Btree类中,因为我希望排序时有一个实现可比较[K]的类型K。有道理吗 package disttree { import scala.collection.immutable.T
package disttree {
import scala.collection.immutable.TreeMap
class Btree[K <: Comparable[K],V](fanout:Int) {
implicit object DefaultOrder extends Ordering[K] {
def compare(k1: K, k2: K) = k1 compareTo k2
}
abstract class Node[K,V] extends TreeMap[K,V]
class InnerNode[K,V] extends Node[K,V]
class LeafNode[K,V] extends Node[K,V]
val root = new InnerNode[K,V]()
def search(n: Node[K,V], key: K): Option[(K,V)] = {
return n.find(_ == key)
}
def insert(key: K, value: V) { }
def delete(key: K) { }
}
}
import disttree._;
object Tester {
def main(args: List[String]) = {
var t = new Btree[Int, Any](2)
t.insert(1, "goodbye")
Console.println(t)
}
}
包目录树{
导入scala.collection.immutable.TreeMap
类Btree[K这将编译并显示两个变体,一个使用Ordered
键(K
),另一个在键上使用Ordering
:
package disttree {
import scala.collection.immutable.TreeMap
import scala.math.{Ordered, Ordering}
// class Btree[K <% Ordered[K], V](fanout:Int) // Using Ordered
class Btree[K : Ordering, V](fanout:Int) // Using Ording
{
/* Using Ordered
implicit object DefaultOrder extends Ordering[K] {
def compare(k1: K, k2: K) = k1 compareTo k2
}
*/
/* Using Ordering */
val keyOrdering = implicitly[Ordering[K]]
implicit object DefaultOrder extends Ordering[K] {
def compare(k1: K, k2: K) = keyOrdering.compare(k1, k2)
}
abstract class Node extends TreeMap[K,V]
class InnerNode extends Node
class LeafNode extends Node
val root = new InnerNode()
def search(n: Node, key: K): Option[(K,V)] = {
return n.find(_ == key)
}
def insert(key: K, value: V) { }
def delete(key: K) { }
}
}
import disttree._;
object Tester {
def main(args: List[String]) = {
var t = new Btree[Int, Any](2)
t.insert(1, "goodbye")
Console.println(t)
}
}
包目录树{
导入scala.collection.immutable.TreeMap
导入scala.math.{有序,有序}
//B类树[K常见错误。这是两种不同的K
:
class Btree[K <: Comparable[K],V](fanout:Int) {
// The K below is the type parameter of Btree
implicit object DefaultOrder extends Ordering[K] {
def compare(k1: K, k2: K) = k1 compareTo k2
}
// The K in the error is the type parameter of Node
abstract class Node[K,V] extends TreeMap[K,V]
// And this is yet another K
class InnerNode[K,V] extends Node[K,V]
// And yet another
class LeafNode[K,V] extends Node[K,V]
<console>:13: error: type mismatch;
found : Btree#31335.this.DefaultOrder#31343.type (with underlying type object Btree#31335.this.DefaultOrder#31344)
required: Ordering#3222[K#31346]
abstract class Node[K,V] extends TreeMap[K,V]()(DefaultOrder)
^
Btree#31335.this.DefaultOrder#31343.type <: Ordering#3222[K#31346]?
object Btree#31335.this.DefaultOrder#31344 <: scala.math.Ordering#11986[K#31346]?
scala.math.Ordering#11986[K#31336] <: scala.math.Ordering#11986[K#31346]?
K#31346 <: K#31336?