我的标题可能不是描述我试图理解的有问题的代码段:
这是一段代码:
def getMeConcurrentInputStream[A, I <: InputStream](in:I)(fn:I => A):Future[A] = {
future {
fn(in)
}andThen {
case all => in.close()
}
}
我正在尝试了解该功能的用途。这是什么:
[A, I <: InputStream](in:I)(fn:I => A)
这是什么: (in:I)(fn:I => A)
并且该函数正在返回Future?我将如何解释:Future[A]
我如何解释以上所有内容?我如何通过从代码中的其他地方调用它来使用此函数?
def getMeConcurrentInputStream
功能命名 getMeConcurrentInputStream
[A, I <: InputStream]
与一般类型A
和类型I
是InputStream
或它的一个子类。
(in:I)(fn:I => A)
具有的参数列表I
和接受I
并返回的函数的参数列表A
:Future[A] = {
返回Future
类型的A
future {
Future
在范围内隐式创建一个ExecutionContext
fn(in)
而Future会fn
使用arguments调用该函数in
。
}andThen {
后记,无论是成功还是失败,
case all =>
在所有情况下
in.close()
调用.close()
上in
。
此函数将涉及InputStream
in的某些操作包装起来,Future
并在完成后将其关闭。
例如,假设我要异步读取文件的第一个字节,然后将其打印出来。我可以这样做:
val fileInputStream = new FileInputStream("example.txt")
val myFuture = getMeConcurrentInputStream(fileInputStream) { inputStream =>
inputStream.read()
}
myFuture.map(println)
就个人而言,我看不到此功能有什么用,但是您可以使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句