Scala 类型标记不在代码块范围内工作?

Scala 类型标记不在代码块范围内工作?,scala,Scala,我遇到这个问题的真正原因是ScalaTests未能编译,因为我在测试范围内定义了一些类,这些类调用了另一个类文件,希望使用TypeTags。注意,由于类B在我的“测试”中(假设这是一个scala测试调用),typetag不再可行。我怀疑也许我不应该在本地作用域内的匿名类上尝试这个,但是有人能帮我理解吗?谢谢 import scala.reflect.runtime.universe._ import scala.Symbol class TypeTagger[T:TypeTag] { v

我遇到这个问题的真正原因是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

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


它似乎使用
WeakTypeTag
而不是
TypeTag
(也可以将
TypeTag
更改为
WeakTypeTag
)。我真的不知道为什么;找不到任何关于这方面的文档。

感谢您找到这篇文章,我希望我能发现更多,但我不确定到底发生了什么。您知道WeakTypeTags是否有任何运行时用途,或者其设计仅用于宏操作吗?
                       ^ not enough arguments for method apply: (implicit tt:
                         ^