类型标记在代码块范围内不起作用



好的,所以我遇到这个问题的真正原因是我的ScalaTests编译失败,因为我在测试范围内定义了一些类,这些类调用另一个期望使用TypeTags的类文件。请注意,由于类 B 在我的"测试"中(假设这是一个 scala 测试调用),typetag 不再可行。我怀疑也许我不应该在本地范围内的匿名类上尝试这样做,但有人可以帮助我理解吗?谢谢

import scala.reflect.runtime.universe._
import scala.Symbol

class TypeTagger[T:TypeTag] {
  val tt = typeTag[T]
}
object TypeTagger {
  def apply[T]()(implicit  tt:TypeTag[T]) = new TypeTagger[T]
}
object TestRunTypeTagger extends App {
  class A
  val test = new TypeTagger[A]
  {
    class B
    val test2 = TypeTagger[B]()    //fails
  }
}

错误:没有可用于 B 的类型标记 val test2 = TypeTaggerB

                       ^ not enough arguments for method apply: (implicit tt:

reflect.runtime.universe.TypeTag[B])chorle.scala.testarea.TypeTagger[B] 在对象类型标记器中。未指定的值参数 tt。 val test2 = TypeTaggerB

                         ^

它似乎适用于WeakTypeTag而不是TypeTag(也typeTag更改为weakTypeTag)。我不知道为什么真的;找不到任何专门相关的文档。

最新更新