2016-05-19 47 views
3

我是scala的新手,並嘗試一些簡單的練習。隱式scala僅在使用時才導入

我試圖通過將implicits放在同伴對象中來使用implicits。但是,除非使用它,否則編譯器不會檢測隱式。

class ImplicitTest { 
    import Implicits.implicitInt; 
    println(implicitInt) 
    def implicitm1(implicit i : Int) = 1 
    println(implicitm1) 
} 
object Implicits { 
    implicit val implicitInt = 1 
} 

這個編譯得很好。但是,如果我註釋掉第三行

\\println(implicitInt)` 

然後我得到它說

could not find implicit value for parameter i:Int` 

not enough arguments for method implicit m1(implicit i:Int) . Unspecified value parameter i` 

println(implicitm1)` 

編譯時錯誤,我幹了什麼錯在這裏做什麼?

在此先感謝

回答

4

如果包括val implicitInt: Int = 1類型,它的工作原理。像這樣的問題是建議總是指定含義的類型的原因之一。

Scala類型推斷從上到下工作,所以在你的情況下,編譯器在檢測println(implicitm1)行時還不知道這種類型。

我想當你包含println(implicitInt)時,編譯器被迫在該行找到implicitInt的類型。

0

另一種解決方案是將Implicits定義移動到ImplicitTest類的上方。

在這種情況下,implicitInt的類型已經被推斷出來。

相關問題