2

for-expressions に関するこの優れた回答を読んだ後、 my を に変換しようとしflatMapましたfor-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 式の何が問題になっていますか?

4

1 に答える 1

2

for-comprehension は、の結果をgetId名前にバインドする必要がありますyield

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

for-comprehension 内の各行は、次のいずれかを使用して、モナド計算の結果を名前にバインドする必要があります。

x <- expr

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

または、次のような単純な割り当てである必要があります

x = expr

getId(Json.parse(r))単独ではどちらでもないので、これは無効です。

于 2013-10-16T16:37:31.377 に答える