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)
意味着有一个从Int
到Foo
的隐式转换。所以 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
的隐式函数
鉴于:
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]
应该可以。
这样想:如果你可以用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