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

我无法理解使用futures的Scala身份调用,scala,future,Scala,Future,我在搞Predef身份函数和未来,得到了这个表达式: identity(_: Future[A]) 这将返回Future[A]=>Future[A],但我只希望Future[A] Identity方法只是返回输入,所以我想知道\uuuUuFuture[A]到底是什么意思。在这种情况下,\uUuUuUuUuFuture[A]表示一个函数,它接受一个Future[A]类型的参数并返回它 类似于在列表(1,2).map(u.toString)中,要映射的参数扩展为x=>x.toString,或者一个

我在搞Predef身份函数和未来,得到了这个表达式:

identity(_: Future[A])
这将返回
Future[A]=>Future[A]
,但我只希望
Future[A]


Identity方法只是返回输入,所以我想知道
\uuuUuFuture[A]
到底是什么意思。

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

类似于在
列表(1,2).map(u.toString)
中,要映射的参数扩展为
x=>x.toString
,或者一个函数,该函数接受单个参数,并对其调用
toString

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

扩展到

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

这是一个
Future[a]=>Future[a]

在这种情况下,
\uuuuU9:Future[a]
表示一个函数,该函数接受类型为
Future[a]
的单个参数并返回它

类似于在
列表(1,2).map(u.toString)
中,要映射的参数扩展为
x=>x.toString
,或者一个函数,该函数接受单个参数,并对其调用
toString

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

扩展到

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

Predef中的未来[a]=>未来[a]

标识定义如下:

def identity[A](x: A): A = x
val f = identity[Future[Int]] _
正如你所看到的,这是一种方法。当你写下如下内容时:

val f = identity(_: Future[Int])
您正在将一个名为
identity
的方法转换为类型为
Future[Int]=>Future[Int]
的函数。
:Future[Int]
部分称为类型归属,它告诉编译器
标识的类型
A
Future[Int]

将方法转换为函数的过程称为eta扩展

附言:你可以做如下同样的事情:

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

Predef中的身份定义如下:

def identity[A](x: A): A = x
val f = identity[Future[Int]] _
正如你所看到的,这是一种方法。当你写下如下内容时:

val f = identity(_: Future[Int])
您正在将一个名为
identity
的方法转换为类型为
Future[Int]=>Future[Int]
的函数。
:Future[Int]
部分称为类型归属,它告诉编译器
标识的类型
A
Future[Int]

将方法转换为函数的过程称为eta扩展

附言:你可以做如下同样的事情:

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

这个方法是你自己写的还是源代码写的?这个方法是你自己写的还是源代码写的?不,它扩展到
(x:Future[A])=>identity(x)
。不,它扩展到
(x:Future[A])=>identity(x)
。是的,在玩了一段时间后,我意识到了答案,我还做了你展示的最后一个例子,只是为了确定。如果我是正确的,我们在不传递任何参数的情况下使用identity函数,但指定参数化类型为Future,对吗?你不是在使用,这样你就可以用eta展开将一个方法转换成一个函数。是的,我在玩了一段时间后意识到了答案,我还做了你展示的最后一个例子,只是为了确定。如果我是正确的,我们在不传递任何参数的情况下使用identity函数,但指定参数化类型为Future,对吗?您不是在使用Curry,这样您就可以使用eta扩展将方法转换为函数。