2014-08-31 35 views
1
object Test extends App { 

    def print(s: String)(implicit p: Prefixer) = { 
    println(p.prefix + s) 
    } 

    print("test") 

} 

case class Prefixer(prefix: String) 

object Prefixer { 
    implicit val p = Prefixer("***") 
} 

上述代碼無法編譯,因爲編譯器無法爲Prefixer找到隱式值。但是,如果我將案例類Prefixer和伴隨對象放在另一個文件中,它就可以工作。這是爲什麼?伴隨對象的斯卡拉隱式邏輯

+0

重複的http://stackoverflow.com/questions/25468583/why-cant-scala-find-my-typeclass-instance-defined-implicitly-in-the-companion-o – 2014-08-31 11:46:10

回答

5

這是與聲明的順序。 如果您只是將Prefixer及其伴侶移動到主對象上方,它也可以使用。 當這個類在另一個文件中時,編譯器可以首先掃描該文件,然後來到實現App的文件。

+1

最好的解決辦法是給一個顯式類型到你的隱式val,但是。不建議聲明不帶類型的暗示。 – sjrd 2014-08-31 07:46:37

+0

@sjrd爲什麼不推薦? – 2014-08-31 11:36:47

+2

@IonuţG.Stanhttp://stackoverflow.com/a/2731285/1296806 – 2014-08-31 11:49:00