2016-03-28 7 views
0

私はScalaを初めて使いました。 私は以下の行動について困惑している:シングルレベルとネストされた理解のためのオプションの動作について混乱しました

val l = List(Option(1)) 
for (i <- l; x <- i) yield x //Example 1: gives me List(1) 
for(x <- Option(1)) yield x //Example 2: gives me Some(1) 

なぜ理解する第二ではなく、私に1を与えるものではありませんか? 2番目の例は基本的にリストからオプションを抜き出して抜粋しているので、2番目の例は2番目の例とまったく同じように動作するように、最初の例の理解のための2番目の例はx <- iのように見えます。と。

+0

のように振る舞う理由です'戻り型は' Int'でなければならず、その型は何もしませんfは失敗事例を表す。 –

答えて

5

簡単に言えば、最初に使用されたタイプに解説が入ります。

for (x <- Option(1)) yield x // Returns Option 
for (x <- List(1)) yield x // Returns List 
for (x <- Array(1)) yield x // Returns Array 

この:この中

for (i <- List(Some(1)); x <- i) yield x 

Desugares:ListリターンList[T]

List(Some(1)).flatMap { case i => i.map { case x => x } } 

flatMap、それは `1であることを戻り値についてはその

+0

これは明らかです。ありがとう。 – user1861088

関連する問題