我正在弄乱Predef身份功能和期货,并得到了这个表达式:
onclick
这会返回identity(_: Future[A])
,但我只期待Future[A] => Future[A]
Identity方法只返回输入,所以我想知道Future[A]
究竟是什么意思。
答案 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)
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]