我无法理解使用期货的Scala身份调用

时间:2016-05-27 22:13:43

标签: scala future

我正在弄乱Predef身份功能和期货,并得到了这个表达式:

onclick

这会返回identity(_: Future[A]) ,但我只期待Future[A] => Future[A]

Identity方法只返回输入,所以我想知道Future[A]究竟是什么意思。

2 个答案:

答案 0 :(得分:1)

在这种情况下,_: Future[A]表示一个函数,它接受Future[A]类型的单个参数并返回它。

List(1,2).map(_.toString)中要映射的参数扩展为x => x.toString的方式或带有单个参数的函数的方式类似,并在其上调用toString

在您的情况下,您不会在其上调用任何方法。您只是指定参数的类型(传递函数的类型,而不是标识)所以:

identity(_: Future[A]) 

扩展为

identity((x: Future[A]) => x)

这是Future[A] => Future[A]

答案 1 :(得分:1)

Predef中的

identity定义如下:

def identity[A](x: A): A = x

如您所见,这是一种方法。当你写下类似的内容时:

val f = identity(_: Future[Int])

您正在将方法identity转换为类型Future[Int] => Future[Int]的函数。 _: Future[Int]部分称为类型归属,并告诉编译器A的{​​{1}}类型为identity

将方法转换为函数的过程以eta扩展名称命名。

P.S。:你可以做同样的事情:

Future[Int]