带有函数的Scala泛型方法

时间:2015-04-17 14:34:18

标签: scala generics

我有一个方法:

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){...}

有没有办法创建通用函数,来处理所有这些情况?

2 个答案:

答案 0 :(得分:3)

您需要指定您获得的函数的返回类型(可能是任何内容)与函数返回的类型相同。

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

我认为没有必要说[T <: Any],因为所有内容都属于Any类型

答案 1 :(得分: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>"
}

如果你想将Future作为一个参数,你可以写出非常相似的Trait for Future。