作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
(斯卡拉 2.11.8)
考虑以下代码:
object ScalaTest extends App {
class Wrapper {
import Wrapper._
def init(): Unit = {
// "could not find implicit value for parameter tc: ScalaTest.Wrapper.TC[Int]"
printWithTC(123)
// Compiles
printWithTC(123)(IntTC)
// Compiles again!
printWithTC(132)
}
}
object Wrapper {
trait TC[A] {
def text(a: A): String
}
implicit object IntTC extends TC[Int] {
override def text(a: Int) = s"int($a)"
}
def printWithTC[A](a: A)(implicit tc: TC[A]): Unit = {
println(tc.text(a))
}
}
(new Wrapper).init()
}
IntTC
得到解决摆在首位? 最佳答案
使用 val
具有显式返回类型。见 https://github.com/scala/bug/issues/801和 https://github.com/scala/bug/issues/8697 (除其他外)。
隐式对象与具有推断返回类型的隐式 vals 和 defs 具有相同的问题。至于你的第二个问题:什么时候IntTC
显式使用您强制编译器对其进行类型检查,因此在此之后它的类型是已知的并且可以通过隐式搜索找到。
class Wrapper {
import Wrapper._
def init(): Unit = {
// Compiles
printWithTC(123)
// Compiles
printWithTC(123)(IntTC)
// Compiles
printWithTC(132)
}
}
object Wrapper {
trait TC[A] {
def text(a: A): String
}
implicit val IntTC: TC[Int] = new TC[Int] {
override def text(a: Int) = s"int($a)"
}
def printWithTC[A](a: A)(implicit tc: TC[A]): Unit = {
println(tc.text(a))
}
}
implicit lazy val
具有显式类型。
关于Scala 类型类隐式解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44282082/
我是一名优秀的程序员,十分优秀!