2014-02-08 64 views
3

我有一種情況,我有一個typeclass與參數必須是不相容的。如果我有一個爲基類和子類定義的隱式對象,我會得到一個「模糊」的錯誤,它不知道要選擇哪個隱式對象。有沒有一種方法來確定隱式對象的優先級?我已經看到了隱式轉換的優先級示例,但從來沒有用於類型類。謝謝Typeclass優先

trait Coded[-X] { // contravariant 
    val x: Int 
} 

def printCode[O1](p1: O1)(implicit ev: Coded[O1]) = 
    println(ev.x) 

class Baseclass 
class Subclass extends Baseclass 

object TEST { 
    implicit object code1 extends Coded[Baseclass] { val x = 5 } 
    implicit object code2 extends Coded[Subclass ] { val x = 6 } 
} 

import TEST._ 

printCode(new Subclass) // error: ambiguous 

回答

4

你的意思是?

scala> trait Low { implicit object code1 extends Coded[Baseclass] { val x = 5 } } 
defined trait Low 

scala> object TEST extends Low { implicit object code2 extends Coded[Subclass ] { val x = 6 } } 
defined object TEST 

scala> import TEST._ 
import TEST._ 

scala> printCode(new Subclass) 
6 
+0

這就是它!非常感謝。 – vertexshader