2012-11-16 52 views
5

想象我有下面的类定义:通过名称类型参数

class Foo[T] 

,我想做到以下几点

def bar(x:Foo[ =>Int ]):Int = ??? 

但是编译器失败,“没有这里不允许按姓名参数类型“

如何使用名称类型作为泛型方法的类型参数?

回答

9

你将不得不提供你自己的懒包装。是这样的:

class Lazy[T](wrp: => T) { 
    lazy val value: T = wrp 
} 

然后:

def bar(x: Foo[Lazy[T]]): Int = ??? 
+0

什么约'类懒惰[T](VAL值:=> T)'?无需重复持有人的价值。 – pedrofurla

+3

@pedrofurla。不允许(val参数不能按名称调用)。如果是,在什么时候价值应该被初始化? –

+1

奇怪。不知道。我想他们会在第一次通话时被初始化。 – pedrofurla

相关问题