我的标题可能没有描述我试图理解的问题代码:
这是一段代码:
def getMeConcurrentInputStream[A, I <: InputStream](in:I)(fn:I => A):Future[A] = {
future {
fn(in)
}andThen {
case all => in.close()
}
}
Run Code Online (Sandbox Code Playgroud)
我试图了解该功能的用途.这是什么:
[A, I <: InputStream](in:I)(fn:I => A)
Run Code Online (Sandbox Code Playgroud)
这是什么: (in:I)(fn:I => A)
而功能正在回归未来?我怎么解释:Future[A]
我如何解释以上所有内容?如何通过从代码中的其他位置调用它来使用此函数?
def getMeConcurrentInputStream
Run Code Online (Sandbox Code Playgroud)
功能命名 getMeConcurrentInputStream
[A, I <: InputStream]
Run Code Online (Sandbox Code Playgroud)
与一般类型A
和类型I
是InputStream
或它的一个子类.
(in:I)(fn:I => A)
Run Code Online (Sandbox Code Playgroud)
具有参数列表I
和接受I
和返回的函数的参数列表A
:Future[A] = {
Run Code Online (Sandbox Code Playgroud)
返回一个Future
类型A
future {
Run Code Online (Sandbox Code Playgroud)
这会Future
在范围内隐式创建ExecutionContext
fn(in)
Run Code Online (Sandbox Code Playgroud)
并且将来fn
用参数调用函数in
.
}andThen {
Run Code Online (Sandbox Code Playgroud)
无论是成功还是失败,
case all =>
Run Code Online (Sandbox Code Playgroud)
在所有情况下
in.close()
Run Code Online (Sandbox Code Playgroud)
调用.close()
上in
.
此函数包含一些涉及InputStream
a的操作,并在Future
完成时关闭它.
例如,假设我想异步读取文件的第一个字节,然后将其打印出来.我能做到这一点:
val fileInputStream = new FileInputStream("example.txt")
val myFuture = getMeConcurrentInputStream(fileInputStream) { inputStream =>
inputStream.read()
}
myFuture.map(println)
Run Code Online (Sandbox Code Playgroud)
就个人而言,我看不出有多少用于此功能,但你去了.
归档时间: |
|
查看次数: |
115 次 |
最近记录: |