Scala:具有参数或泛型类型参数的方法 returns 一个 Future

Scala: a method with a parameteric or generic type argument that returns a Future

我的标题可能没有描述我试图理解的问题代码段:

这是一段代码:

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 和类型 IInputStream 或其子类。

(in:I)(fn:I => A)

带有一个 I 的参数列表和一个接受 I 并返回 A

的函数的参数列表
:Future[A] = {

返回 Future 类型 A

future {

在范围内隐式 ExecutionContext

中创建一个 Future
fn(in)

并且 future 使用参数 in.

调用函数 fn
}andThen {

后记,无论成功还是失败,

case all =>

在所有情况下

in.close()

in 上致电 .close()


此函数将一些涉及 InputStream 的操作包装在 Future 中,并在完成后将其关闭。

例如,假设我想异步读取文件的第一个字节,然后打印出来。我可以这样做:

val fileInputStream = new FileInputStream("example.txt")
val myFuture = getMeConcurrentInputStream(fileInputStream) { inputStream =>
    inputStream.read()
}
myFuture.map(println)

就我个人而言,我看不出此功能有多大用处,但就这样吧。