2015-04-17 37 views
0

我有一個方法:稱取功能Scala的泛型方法

private def foo(f: => Future[Any]): Future[Any] = { 
    //code, code, code 
    //function return same result as function that taken 
} 

這種運作良好,但我需要在我與不同類型項目的不同部分使用,並有一定的限制。 如果我需要調用某種我使用的類型的方法,那麼它不可用,不需要投射。

例如:

if(foo("abacaba").containsSlice("dabacaba")){...} 

if(foo(15) > 55){...} 

有沒有方法來創建通用的功能,處理所有這些情況?

+0

像'未來[A]'或只是一些泛型'A'? –

回答

3

你需要指定你得到的函數的返回類型(可能是任何東西)是你函數返回的類型。

private def foo[T](f: => Future[T]): Future[T] = { 
    //code, code, code 
    //function return same result as function that taken 
} 

我不認爲它是真的有必要說[T <: Any],因爲一切是類型Any

0

你已經擁有它在Scala的庫中定義爲scala.Function0 實際上,你也該定義得到功能性狀參數爲Function1 - Function22。

這是Function0的源代碼 -

trait Function0[@specialized(Specializable.Primitives) +R] extends AnyRef { self => 
    /** Apply the body of this function to the arguments. 
    * @return the result of function application. 
    */ 
    def apply(): R 

    override def toString() = "<function0>" 
} 

如果你想獲得未來,你可以寫非常相似的特質對未來PARAM。