【问题标题】:Scala: a method with a parameteric or generic type argument that returns a Future具有返回 Future 的参数或泛型类型参数的 Scala 方法
【发布时间】:2015-04-14 10:24:45
【问题描述】:

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

这是一段代码:

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 =&gt; A)

并且该函数正在返回一个 Future?我将如何解释:Future[A]

我如何解释以上所有内容?我将如何通过从代码中的其他地方调用它来使用这个函数?

【问题讨论】:

    标签: scala future


    【解决方案1】:
    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 调用函数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)
    

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

    【讨论】:

    • 非常感谢您付出了很多努力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 2020-07-16
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多