Рассмотрим:
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]? Я знаю, что могу сопоставить с шаблоном, но вопрос, можно ли это сделать, используя для понимания только что возникший вопрос.
Спасибо Тэнши за ответ, который выполняет свою работу, однако я только что столкнулся с другим примером моей проблемы:
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
в качестве: a <- Some(A(c))
а как насчет неявного? Должно ли это означать изменение дизайна в моем коде?