gpt4 book ai didi

Scala 递归 API 调用以获取所有结果

转载 作者:行者123 更新时间:2023-12-05 00:56:02 25 4
gpt4 key购买 nike

我对 Scala 很陌生,我想要实现的是对具有不同偏移量的 API 进行足够的调用,直到获得所有结果。

这是我所拥有的简化版本,我想知道是否有更惯用的 Scala 方法来做到这一点。 (代码示例可能不是 100% 准确,这只是我举个例子)

def getProducts(
limit: Int = 50,
offset: Int = 0,
otherProducts: Seq[Product] = Seq()): Future[Seq[Product]] = {

val eventualResponse: Future[ApiResponse] = apiService.getProducts(limit, offset)

val results: Future[Seq[Product]] = eventualResponse.flatMap { response =>

if (response.isComplete) {
logger.info("Got every product!")
Future.successful(response.products ++ otherProducts)
} else {
logger.info("Need to fetch more data...")

val newOffset = offset + limit
getProducts(limit, newOffset, otherProducts ++ response.products)
}
}

results
}

路过 otherProducts参数只是感觉不对:P

在此先感谢您的任何建议 :)

最佳答案

看来你已经暴露了尾递归实现,这有点像函数式编程中的实现细节。

至于我,我通常将这些函数包装到一个没有累加器参数的外部调用中( otherProducts ):

def getProducts(limit: Int = 50, offset: Int = 0): Future[Seq[Product]] = {
def loop(limit: Int = 50,
offset: Int = 0,
acc: Seq[Product] = Seq()): Future[Seq[Product]] = ... your code with tail recursion...

loop(limit, offset)
}

但这只是品味问题,如果 otherProducts当然有效。只是 tailrec 累加器的一个奇特名称。

关于Scala 递归 API 调用以获取所有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36953001/

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