Skip to content

Instantly share code, notes, and snippets.

@yuroyoro
Created June 5, 2010 06:41
Show Gist options
  • Save yuroyoro/426372 to your computer and use it in GitHub Desktop.
Save yuroyoro/426372 to your computer and use it in GitHub Desktop.
// Optionをfor式で受けるとうれしい場合をちょっと思い付いたので
scala> val (o1,o2,o3) = ( Some("foo"),None,Some("bar") )
o1: Some[java.lang.String] = Some(foo)
o2: object None = None
o3: Some[java.lang.String] = Some(bar)
// 3つのOptionがすべて値を持つ場合のみtuple3を作り出したいときは
// for式のgeneratorにOptionを与えると記述が簡単になる
scala> for( v1 <- o1; v2 <- o2; v3 <- o3) yield { ( v1,v2,v3 ) }
res5: Option[(java.lang.String, Nothing, java.lang.String)] = None
scala> val o2 = Some( "hoge")
o2: Some[java.lang.String] = Some(hoge)
scala> for( v1 <- o1; v2 <- o2; v3 <- o3) yield { ( v1,v2,v3 ) }
res6: Option[(java.lang.String, java.lang.String, java.lang.String)] = Some((foo,hoge,bar))
// このfor式はこのようにflatMapで書いたのと同じ
scala> o1 flatMap{ v1 => o2 flatMap{ v2 => o3 map{ v3 => ( v1,v2,v3 ) } } }
res7: Option[(java.lang.String, java.lang.String, java.lang.String)] = Some((foo,hoge,bar))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment