我的标题可能没有描述我想要理解的问题代码:
这是一段代码:
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]
我如何解释以上所有内容?如何通过从代码中的其他位置调用它来使用此函数?
答案 0 :(得分:5)
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)
以后将使用参数fn
调用函数in
。
}andThen {
之后,无论是成功还是失败,
case all =>
在所有情况下
in.close()
在.close()
上致电in
。
此函数在InputStream
中包含涉及Future
的某些操作,并在完成后将其关闭。
例如,假设我想异步读取文件的第一个字节,然后将其打印出来。我能做到这一点:
val fileInputStream = new FileInputStream("example.txt")
val myFuture = getMeConcurrentInputStream(fileInputStream) { inputStream =>
inputStream.read()
}
myFuture.map(println)
就个人而言,我看不到这个功能的用处,但你去了。