2016-04-13 27 views
0

Scala'da ikili ağaç yazmaya çalışıyorum. İşte benim BinaryTree.apply yöntemde benim tanımları Scala: Öğelerin sıralamasında kat kullanarak ikili ağaç oluşturmaya çalışırken belirsiz değer parametresi hatası

sealed trait Tree[+T] 
final object Empty extends Tree[Nothing] 
final case class Leaf[A](value: A) extends Tree[A] 
final case class Branch[A](elem: A, left: Tree[A], right: Tree[A]) extends Tree[A] 


object BinaryTree { 

    def insert[ A : Ordering] (t : Tree[A])(implicit elem : A): Tree[A] = { 
    val order = implicitly[Ordering[A]] 
    t match { 
     case Empty => Leaf(elem) 
     case Leaf(x) if (elem == x) => t 
     case Leaf(x) if (order.lt(elem, x)) => new Branch(elem, Empty, new Leaf(x)) 
     case Leaf(x) => new Branch(elem, new Leaf(x), Empty) 
     case Branch(x, left, right) if (elem == x) => t 
     case Branch(x, left, right) if (order.lt(elem, x)) => new Branch(x, insert(left), right) 
     case Branch(x, left, right) => new Branch(x, left, insert(right)) 
    } 
    } 

    def apply[A: Ordering](as: A*): Tree[A] = 
    as.tail.foldLeft[Tree[A]](Leaf(as.head))((t, elem) => BinaryTree.insert(t)(elem)) 
} 

aşağıdaki hatayı demek şimdi ne ya ben eksik ben

"Unspecified value parameters: elem : A" 

emin değil almak vardır. Herkes bana yardım edebilir

+0

Gizli anahtar kelimeyi ekleme satırından kaldırırsam ve [A: Sipariş Verme] (t: Ağaç [A]) (elem: A) olarak yazarım, hatadan kurtulmuş gibi görünüyor. –

cevap

0

Bağlam bağlamında ve örtülü parametreler kullanırsanız, bağlamla ilişkili tüm parametreler tek bir param kümesini oluşturur, set sonundadır.

Yani insert imza:

def insert(t: Tree[A])(implicit o: Ordering[A], elem: A) 

Size insert çağrılırken o ve elem parametrelerini geçirmek veya ikisini de geçmesi gerektiğini ya anlamına gelir:

def insert[A: Ordering] (t: Tree[A])(implicit elem: A) 

benzer.

İlgili konular