【问题标题】:Reflection on type members?反思类型成员?
【发布时间】:2016-01-29 22:22:08
【问题描述】:

我知道这是可能的:

import scala.reflect._

trait Foo[A]

def isDouble[A: ClassTag](foo: Foo[A]) = classTag[A].runtimeClass == classOf[Double]

object Foo1 extends Foo[Double]
object Foo2 extends Foo[String]
assert(isDouble(Foo1))
assert(!isDouble(Foo2))

但是,现在我想让A 成为一个抽象类型:

import scala.reflect._

trait Foo {
  type A
}

def isDouble(foo: Foo): Boolean = ???

object Foo1 extends Foo {override type A = Double}
object Foo2 extends Foo {override type A = String}
assert(isDouble(Foo1))
assert(!isDouble(Foo2))

如何实现isDouble函数?

【问题讨论】:

    标签: scala scala-reflect scala-generics


    【解决方案1】:

    Scala 让我们将参数引用到柯里化函数的左侧(在本例中为 foo):

    def isDouble(foo: Foo)(implicit ev: ClassTag[foo.A]) = classTag[foo.A].runtimeClass == classOf[Double]
    

    【讨论】:

      猜你喜欢
      • 2013-02-02
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-05
      相关资源
      最近更新 更多