2012-11-16 6 views
5

私は次のクラス定義を持っている想像:名前による型パラメータ

class Foo[T] 

をし、私は次の

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

をしたい。しかし、コンパイラはここでは許さ「ノー名前によるパラメータの型で失敗します"

genericメソッドの型パラメータとしてby-name型を使用するにはどうすればよいですか?

答えて

9

独自のレイジーラッパーを用意する必要があります。このような何か:

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

、その後: `:

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

何'クラスのLazy [T](=> T valの値)についてはどうですか?バリューホルダーを繰り返す必要はありません。 – pedrofurla

+3

@pedrofurla。許可されていません(valパラメータは名前で呼び出すことはできません)。それがあったのであれば、何時に初期化されることになるでしょうか? –

+1

奇妙な。それを知らなかった。私は彼らが最初の呼び出しでinit-edされると思います。 – pedrofurla

関連する問題