gpt4 book ai didi

scala - Scala中的借贷模式

转载 作者:行者123 更新时间:2023-12-03 15:13:25 27 4
gpt4 key购买 nike

Scala in Depth演示贷款模式:

def readFile[T](f: File)(handler: FileInputStream => T): T = {
val resource = new java.io.FileInputStream(f)
try {
handler(resource)
} finally {
resource.close()
}
}

示例用法:
readFile(new java.io.File("test.txt")) { input =>
println(input.readByte)
}

这段代码看起来简单明了。什么是 Scala 中 Loaner 模式的“反模式”,以便我知道如何避免它?

最佳答案

对于 Loan 模式,重要的是要知道实际调用您借出资源的代码“位”何时会使用它。

如果您想从贷款模式返回 future ,我建议不要在传递给贷款模式函数的函数内创建它。

不要写

readFile("text.file")(future { doSomething })

但做:
future { readFile("text.file")( doSomething ) }

我通常做的是定义两种类型的贷款模式函数:同步和异步

所以在你的情况下,我会:
def asyncReadFile[T](f: File)(handler: FileInputStream => T): Future[T] = {
future{
readFile(f)(handler)
}
}

这样可以避免调用已关闭的资源。并且您重用了您已经测试过并且希望是正确的同步函数代码。

关于scala - Scala中的借贷模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20762240/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com