2016-01-29 29 views
0

我知道這是可能的:對類型成員的反思?

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功能?

回答

0

斯卡拉讓你參考的參數的咖喱功能的左側(在這種情況下foo):

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