相关疑难解决方法(0)

Scala 2.10 TypeTag用法

我正在挖掘新的scala反射api,并且无法弄清楚为什么以下代码段不能按预期工作.给定层次结构(试图尽可能地简化):

import scala.reflect.runtime.universe._

trait TF[A] {
  implicit def t: TypeTag[A]

  def f[T <: A: TypeTag]: PartialFunction[Any, A] = {
    case msg: T if typeOf[T] =:= typeOf[A] => msg
  }
}

class TFilter[T: TypeTag] extends TF[T] {
  def t = typeTag[T]
}

case class Foo(x: Int)
Run Code Online (Sandbox Code Playgroud)

我希望方法f过滤给定类型的对象.所以下面的片段应该返回Seq[Foo]

val messages = Seq(1, "hello", Foo(1))

val tFilter = new TFilter[Foo]
messages collect tFilter.f[Foo]
Run Code Online (Sandbox Code Playgroud)

它实际上会返回,Seq[Foo]但其他消息未经过滤,这听起来像一个错误.

res1: Seq[Foo] = List(1, hello, Foo(1))
Run Code Online (Sandbox Code Playgroud)

问题.我使用TypeTag错误还是新反射api的缺陷?

PS0.试过Scala 2.10.0-RC1 …

reflection scala scala-2.10

10
推荐指数
1
解决办法
4064
查看次数

标签 统计

reflection ×1

scala ×1

scala-2.10 ×1