2015-04-17 85 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。