小编Ser*_*nko的帖子

具有上界的函数中类型推断的奇怪行为

在实现中更改上限时进入这种奇怪的行为,但忘记在界面中更改它.我认为最后一个语句不应该编译,但它确实会返回意外的结果.

trait SuperBase
trait Base extends SuperBase

class SuperBaseImpl extends SuperBase

trait Service {
  def doWork[T <: Base : Manifest](body: T => Unit): String
  def print[T <: Base : Manifest]: String
}

object ServiceImpl extends Service {
  override def doWork[T <: SuperBase : Manifest](body: T => Unit): String =
    print[T]
  def print[T <: SuperBase : Manifest]: String =
    manifest[T].runtimeClass.toString
}

val s: Service = ServiceImpl

// does not compile as expected
// s.print[SuperBaseImpl]

// returns "interface Base"
s.doWork { x: …
Run Code Online (Sandbox Code Playgroud)

scala type-inference lower-bound

7
推荐指数
1
解决办法
163
查看次数

标签 统计

lower-bound ×1

scala ×1

type-inference ×1