斯卡拉:隐式
问题描述:
隐含类
考虑:斯卡拉:隐式
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'编译的原因。 –