如果在几个列表中循环但在Scala中为一个是空的,会发生什么

问题描述 投票:-3回答:1

我有一个Scala循环:

for {
         players <- Players.getAll(p => p.age > 4)
         salaries <- Salaries.getAll(s => s.amount > 30000)
    }yield {
           /*other stuff to do*/
            ....      
    }

发生的事情只是其中一名球员或薪水是空的?其他东西的代码会被执行吗?循环会不会被执行?

怎么了

scala playframework
1个回答
2
投票

我重新格式化您的代码以使其更清晰:

val pIn = Players.getAll(p => p.age > 4)
val sIn = Salaries.getAll(s => s.amount > 30000)

for {
     players <- pIn
     salaries <- sIn
}yield {
       /*other stuff to do*/
        ....      
}

它翻译成

pIn.flatMap(players => sIn.flatMap(salaries => { /*other stuff to do*/...}))

我们知道

flatMap工作应用一个函数,该函数返回列表中每个元素的序列,并将结果展平为原始列表。

没有列表元素 - 没有应用功能。这意味着/*other stuff to do*/代码不会在pInsIn为空的情况下运行

注意pInsIn是空的。这个很重要。如果playerssalaries是空的那么/*other stuff to do*/将起作用。

这不起作用:

val pIn = List.empty
val sIn = List(1,2,3)

这将有效:

val pIn = List(List.empty)
val sIn = List(1,2,3)
© www.soinside.com 2019 - 2024. All rights reserved.