2013-03-06 23 views
1

我有一個看起來如下的方法:打開一個方法調用爲()=> T功能斯卡拉

def myMethod[T](klazz:Class[T]):Z 

我想在我的代碼來創建一個地圖Int =>() => Z類型,這樣,我可以在地圖上看看只生成我需要的Z

如果我做的不過以下,:

Map(0 -> myMethod(classOf[String]) _ , 1 -> myMethod(classOf[StringBuilder])) 

如何避免寫() => myMethod(classOf[String])

回答

4

爲什麼不簡單地更改myMethod以便它返回一個函數?

def myMethod(clazz: Class[_]):() => Z = { 
    {() => /* put the body of the old myMethod here */ } 
} 

然後,你可以這樣做:

Map(0 -> myMethod(classOf[String]) , 1 -> myMethod(classOf[StringBuilder])) 
3

另一種方式做,這是一個自定義的社員:

implicit class LazyMapArrow[K](val self: K) extends AnyVal { 
    def ~>[V](other: => V): (K,() => V) = (self,() => other) 
}