考慮:斯卡拉:隱式
implicit class Foo(val i: Int) {
def addValue(v: Int): Int = i + v
}
是可以適用於任何implicitly
? 我這裏得到一個錯誤:
<console>:14: error: could not find implicit value for parameter e: Foo
implicitly[Foo]
考慮:斯卡拉:隱式
implicit class Foo(val i: Int) {
def addValue(v: Int): Int = i + v
}
是可以適用於任何implicitly
? 我這裏得到一個錯誤:
<console>:14: error: could not find implicit value for parameter e: Foo
implicitly[Foo]
的implicit class Foo(val i: Int)
意味着有一個隱式轉換從Int
到Foo
。所以implicitly[Int => Foo]
應該工作。
想一想吧:如果你能召喚一個Foo
和implicitly[Foo]
,你會期望得到Foo
嗎? A Foo(0)
? A Foo(1)
? A Foo(2)
?
對於進一步的細節,
implcitly
關鍵字可以如以下
implitly說明[T]是指在上下文中的類型T的返回隱含值
這意味着,隱含地獲得Foo
您需要在範圍
例如,
implicit class Foo(val i: Int) {
def addValue(v: Int): Int = i + v
}
implicit val foo:Foo = Foo(1)
val fooImplicitly = implicitly[Foo] // Foo(1)
另外,還要注意Foo
本身只是一個類,
但是通過把隱含的關鍵字在類定義的前面,
編譯器創建類型的隱函數Int => Foo
'隱式地[Foo](4)'將返回'res0:Foo = Foo @ 5d5eef3d'。 –
這是因爲'val foo:Foo = 4'編譯的原因。 –