Scala:具有返回Future的参数或泛型类型参数的方法

use*_*558 1 scala future

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

这是一段代码:

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]

我如何解释以上所有内容?如何通过从代码中的其他位置调用它来使用此函数?

Pau*_*per 5

def getMeConcurrentInputStream
Run Code Online (Sandbox Code Playgroud)

功能命名 getMeConcurrentInputStream

[A, I <: InputStream]
Run Code Online (Sandbox Code Playgroud)

与一般类型A和类型IInputStream或它的一个子类.

(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.


此函数包含一些涉及InputStreama的操作,并在Future完成时关闭它.

例如,假设我想异步读取文件的第一个字节,然后将其打印出来.我能做到这一点:

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

就个人而言,我看不出有多少用于此功能,但你去了.