#scala
Вопрос:
Редактировать:
Предположим, у меня есть Seq:
Seq(Some("Earth"),Some("Mars"))
Мне нужно добавить еще несколько элементов в начале этой последовательности. Добавляемые значения генерируются на основе значения параметра.
Поэтому я стараюсь делать так, как:
val o = ....//Option calculated here
Seq(o.map(myFunction(_)),"Earth","Mars")
def myFunction(s: String) = s match {
case "x" => Seq(Some("Jupiter"), Some("Venus"))
case "y" => Seq(Some("PLuto"), Some("Mercury"))
}
Но карта дала бы мне Немного(Seq (…..)).
Комментарии:
1. Можете ли вы показать нам, что вы сделали ?
2. Итак, предположим, что опция была a
Some
, тогда вы хотите добавить все элементы, возвращенные,myFunction
если это было aNone
, то ничего не следует добавлять, верно?3. Да, это то, что мне нужно.
Ответ №1:
Для такого рода проблем я рекомендую проверить Scaladoc и следовать методике, называемой type-tetris.
Тебе это нужно:
def prependIfDefined(data: Option[A], previousElements: Seq[Option[B]]): Seq[Option[B]] =
data.fold(ifEmpty = Seq.empty[Option[B]])(getNewData) previousElements
def getNewData(a: A): Seq[Option[B]] = ???