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

时间:2015-04-14 02:12:20

标签: scala 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]

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

1 个答案:

答案 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)

就个人而言,我看不到这个功能的用处,但你去了。