2

为什么类型标签不能与类型别名一起使用。例如给定

trait Foo
object Bar {
  def apply[A](implicit tpe: reflect.runtime.universe.TypeTag[A]): Bar[A] = ???
}
trait Bar[A]

我想在以下方法中使用别名,因为我需要输入A大约两打:

def test {
  type A = Foo
  implicit val fooTpe = reflect.runtime.universe.typeOf[A] // no funciona
  Bar[A]                                                   // no funciona
}

下次尝试:

def test {
  type A = Foo
  implicit val fooTpe = reflect.runtime.universe.typeOf[Foo] // ok
  Bar[A]                                                     // no funciona
}

所以看来我根本不能使用我的别名。

4

2 回答 2

1

改用weakTypeOf。反射在内部区分全局可见和局部声明,因此您也需要区别对待它们。这个疣可能会在更高版本的 Scala 中被删除。

于 2013-02-05T10:40:34.900 回答
0

变更def apply声明:

import scala.reflect.runtime.universe._
trait Foo
object Bar {
  def apply[A]()(implicit tpe: TypeTag[A]): Bar[A] = ???
}
trait Bar[A]
class test {
  type A = Foo
  implicit val foo = typeOf[A]
  def test = Bar[A]()                                                 
}
于 2013-02-03T23:36:23.707 回答