【发布时间】:2017-06-23 18:30:28
【问题描述】:
假设您使用的 API 允许您在页面中滚动浏览结果集。每个页面都为后续页面返回一个 ID。
您可以使用 Scala Iterator 及其惰性 concat (++) 运算符递归地执行此操作,这是一个成熟的习惯用法:
def allResults: Iterator[Result] = {
def nextPage(pageId: String): Iterator[Result] = {
val page = invoke api
Iterator(page.results) ++ nextPage(page.nextPageId)
}
val firstPage = invoke api
Iterator(firstPage.results) ++ nextPage(firstPage.nextPageId)
}
这个成语堆栈安全吗?还是有其他需要担心的效率问题?
【问题讨论】: