Scala泛型类型不匹配

Tyc*_*cho 0 generics scala

在Scala中,我正在尝试:

import scala.reflect.runtime.{universe => ru}
def foo[T <: Any]: ru.WeakTypeTag[T] = ru.weakTypeTag[String]
Run Code Online (Sandbox Code Playgroud)

但这让我产生了:

<console>:34: error: type mismatch;
 found   : reflect.runtime.universe.WeakTypeTag[String]
 required: reflect.runtime.universe.WeakTypeTag[T]
 def foo[T <: Any]: ru.WeakTypeTag[T] = ru.weakTypeTag[String]
Run Code Online (Sandbox Code Playgroud)

什么在这里?我相对肯定String应该满足T派生的类型约束Any...

我想String无法绑定到Ttype参数.在我的用例中,其他类型也可以返回,但我不确定如何在执行函数之前预先得到编译器的答案,如果这是它所期望的.

Mar*_*rth 6

你的方法foo声称,对于任何T <: Any,它返回一个WeakTypeTag[T].也就是说,如果T是(例如)Int,它应该返回一个WeakTypeTag[Int].但是,您的方法始终返回a WeakTypeTag[String],因此类型不匹配.