検討:
def xs(c: String): Option[List[Long]] = ...
val ys: Stream[Long] = ...
今、私は次のようなメソッドを書きます:
def method(oc: Option[String]): Option[Long] = for {
c <- oc
list <- xs(c)
} yield{
for {
first <- ys.find(list contains _)
} yield first
}
ただし、推測される型はOption [Option [Long]]であるため、もちろんこれはコンパイルされません。
Scala構文と標準ライブラリに関してOption[Long]を取得する方法はありますか?パターンマッチングができることは知っていますが、理解のためにそれを使用して実行できるかどうかという疑問が生じただけです。
答えてくれたtenshiに感謝します、それは仕事をします、しかし私はちょうど私の問題の別の例に遭遇しました:
class T
class U
class A(t: String)(implicit x: T)
def getU(a: A): Option[U] = ...
def getU_2(oc: Option[String]): Option[U] = for{
c <- oc
} yield{
implicit val someImplicit: T = new T
val a = A(c)
getU(a)
}
a
for asとして追加できます:a <- Some(A(c))
しかし、暗黙的にはどうですか?それは私のコードの設計変更を意味する必要がありますか?