我有一个方法:
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 :(得分: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。