Scala:隐式到隐式 class

Scala: implicitly to implicit class

鉴于:

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)意味着有一个从IntFoo隐式转换。所以 implicitly[Int => Foo] 应该可以。

这样想:如果你可以用implicitly[Foo]召唤一个Foo,你希望得到哪个Foo?一个Foo(0)?一个Foo(1)?一个 Foo(2)?

欲了解更多详情,

implcitly关键字可以解释如下

implitly[T] means return implicit value of type T in the context

这意味着,要隐式获得 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 本身只是一个 class,

但是通过在 class 定义前放置隐式关键字,

编译器创建类型为 Int => Foo

的隐式函数