Scala:隐含于隐式类

时间:2016-11-21 22:38:04

标签: scala implicit-conversion implicit

假设:

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]

2 个答案:

答案 0 :(得分:7)

implicit class Foo(val i: Int)表示从IntFoo存在隐式转化。所以implicitly[Int => Foo]应该有用。

这样想:如果你可以召唤一个Fooimplicitly[Foo]Foo你期望得到什么?一个Foo(0)?一个Foo(1)?一个Foo(2)

答案 1 :(得分:0)

有关详细信息,

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

的隐式函数