【发布时间】:2019-11-10 21:25:59
【问题描述】:
我有一个简单的代码:
override def createContributorsList(url: String, params: String): F[List[Contributor]] = getContributorsFromClient(url, params).fold[List[Contributor]](_ => List(), res => res)
override def createReposList(organization: String, params: String): F[List[GitRepository]] = getReposFromClient(organization, params).fold[List[GitRepository]](_ => List(), res => res)
此代码返回来自 github 的存储库列表和贡献列表。但是现在我需要为createReposList 找到的每个存储库调用createContributorsList。我做了一个for comprehension 块:
val stats = new StatisticsRepository[IO](new GitHttpClient[IO])
val res = for {
repos <- stats.createReposList("github", "")
} yield repos
它工作正常,它找到了给定组织 (github) 的存储库。所以我试着这样做:
val res = for {
repos <- stats.createReposList("github", "")
list = repos.foreach(repo => stats.createContributorsList(repo.contributors_url, ""))
} yield (repos, list)
但list 始终为空。我不知道没有for comprehension 我怎么能做到这一点,因为我在Monads 上操作,就像IO 一样。我应该如何创建一个代码来遍历来自 repos 的每个 repo 并在每个人身上调用 stats.createContributorsList?
【问题讨论】:
标签: scala scala-cats for-comprehension