scala - 在scala中为理解而组成
问题描述
我有一个供理解的任务列表:
def main = {
List("en", "es", "de").foreach(c => execAll(c))
}
def execAll(country: String): Future[Unit] = {
for {
_ <- repo.exec1(country)
_ <- repo.exec2(country)
_ <- repo.exec3(country)
_ <- repo.exec4(country)
_ <- repo.exec5(country)
} yield ()
}
现在的问题是因为我需要执行功能exec4
并且exec5
仅适用于“en”和“es”国家。我尝试按条件将函数添加到期货列表中(if country == "en"
不要添加)
val all = for {
_ <- repo.exec1(country)
_ <- repo.exec2(country)
_ <- repo.exec3(country)
} yield ()
val enOrEsOnly = for {
_ <- repo.exec4(country)
_ <- repo.exec5(country)
} yield ()
country match {
case "de" => all
case other => all + enOrEsOnly // invalid code
}
可以在这里找到解决方案for-comprehension
吗?或者可以在这里使用期货列表?我不需要他们的结果。谢谢
或者我可以使用 anif
来解决它:
if (country != "de") {
repo.exec4(country)
repo.exec5(country)
}
解决方案
我宁愿在上面添加一个repo
具有验证的额外层,这样您的代码将是相同的,并且在该额外层中您将执行以下操作:
final class Domain(repo: Repository) {
def exec4(country: String): Future[Unit] =
country match {
case "en" | "es" => repo.exec4(country)
case _ => Future.unit
}
}
推荐阅读
- google-app-engine - 如何从 Eclipse 中在 Google Cloud Platform 上部署 java 项目
- linux - laravel - 无法以附加模式打开流或文件“/storage/logs/laravel.log”:无法打开流:权限被拒绝
- c++ - 为什么我无法在这个问题中打印长度值?
- java - Java FX 在 Windows 中工作的 LINUX PC 7.4 RHEL 上不起作用
- python - 带有 sqlalchemy 的 Pandas to_sql:如何为非常大的数据帧加速向 SQL Server 插入行?
- angular - Angular,如何检查 Post 是否完成。ToPromise() 和 subscribe() 不起作用
- python - 使用 Python 进行数据抓取 - 结果为空
- python-3.x - Telethon 有没有办法从聊天中获取消息以及发件人姓名、日期和时间?
- json - InvalidDefinitionException:直接自引用导致循环。尝试将具有成员的类作为 IonValue 序列化为 IonValue
- file - 如何在电子中添加文件资源管理器面板,如 vs 代码