我无法理解使用futures的Scala身份调用
我在搞Predef身份函数和未来,得到了这个表达式:我无法理解使用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,或者一个
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扩展将方法转换为函数。