Après avoir lu cet excellent answer sur les expressions, j'ai essayé de convertir mon flatMap
en for-expression
.flatMap versus pour l'expression
val results: List[String] = foo()
def getId: List[String] = List((json \ "_id").asOpt[String].getOrElse(""))
val xs: List[String] = results.flatMap(x => getId(Json.parse(x)))
Ensuite, la for-expression.
val results: List[String] = foo()
def getId: List[String] = List((json \ "_id").asOpt[String].getOrElse(""))
val xs: List[String] = for {
r <- result
getId(Json.parse(r))
}
Je reçois une erreur de compilation que <-
était attendu sur la ligne getId(...)
, mais trouvé }
.
Qu'est-ce qui ne va pas avec my for expression?
ah, donc «rendement» est toujours nécessaire? Dans le cas de la carte à for-expression, le rendement retournera une liste [...]. Mais pour un flatMap à for-expression, yield retournera une List [List [...]]? –
'yield' est requis si vous voulez obtenir une valeur (par opposition aux effets secondaires.) Je ne suis pas sûr d'où vous avez' List [List [...]] 'from. –