scala - flatMap 与 for 表达式

标签 scala dictionary

读完这篇优秀文章后answer在 for 表达式上,我尝试转换我的 flatMapfor-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)))

然后是 for 表达式。

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))
}

我收到一个编译时错误 <-预计在 getId(...)线,但发现} .

我的 for 表达式有什么问题?

最佳答案

您的 for 理解需要将 getId 的结果绑定(bind)到名称,并yield:

val xs: List[String] = for {
  r <- result
  x <- getId(Json.parse(r))
} yield x

for-compression 中的每一行都需要使用以下方法将单子(monad)计算的结果绑定(bind)到名称

x <- expr

// or, `_ <- expr` to run `expr` purely for its effects and ignore the result

或者它需要是一个简单的分配,例如

x = expr

由于 getId(Json.parse(r)) 单独两者都不会,因此这是无效的。

关于scala - flatMap 与 for 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19408769/

相关文章:

python - 我可以根据将键与两个互斥键列表匹配来从单个 python 字典理解中产生两个总和吗?

scala - 如何计算由 Spark 中的 (Key, [Value]) 对组成的 RDD 中每对的平均值?

java - Chisel 的推荐 Java/Scala 设置

java - 在 Java 中使用 Scala 对象

scala - Scala 环境中的特定配置

python - 拆分字典键中的空格,取值

java - HDFS:使用 Java/Scala API 移动多个文件

python - 更Pythonic的方式来做到这一点?

c# - 订购字典

java - 在枚举中添加映射并将键和值放入其中?