Для понимания разбора необязательной строки в int - PullRequest
0 голосов
/ 20 июня 2019

Скажите, что у меня есть следующее для понимания:

val validatedInput = for {
    stringID <- parseToInt(optionalInputID)
} yield (stringID)

, где optionInputID - это входной параметр типа Option[String]. Я хочу иметь возможность конвертировать Option [String] в просто строку, если, конечно, есть опция присутствует. Насколько я знаю, вы не можете найти совпадения внутри для понимания.

Некоторые детали были опущены, например, другие для элементов понимания. Поэтому я хотел бы знать, возможно ли сделать это внутри для понимания. Если нет, то какова подходящая альтернатива? Могу ли я сделать это за пределами понимания?

Ответы [ 2 ]

4 голосов
/ 20 июня 2019

Просто добавьте его к for comprehension:

val validatedInput = for {
  inputID <- optionalInputID
  stringID <- parseToInt(inputID)
} yield (stringID)

Это будет работать, только если parseToInt имеет тип Option. Если он возвращает что-то из Try, вы не можете этого сделать - потому что вы не можете смешивать Try и Option в одном и том же для понимания.

Если parseToInt возвращает Try, вы можете сделать следующее:

val validatedInput = for {
  inputID <- optionalInputID
  stringID <- parseToInt(inputID).toOption
} yield (stringID)
1 голос
/ 20 июня 2019

Я хочу иметь возможность конвертировать Option [String] в просто String.

Поэтому я хотел бы знать, возможно ли сделать это внутри для понимания

В Scala for-comprehension десугаров в комбинацию map, flatMap, filter, ни один из которых не позволяет извлечь значение из Option.

Если нет, то какова подходящая альтернатива? Могу ли я сделать это за пределами понимания?

Для этого вы можете использовать один из get (небезопасный) или более безопасный вариант getOrElse или fold:


val validatedInput: Option[String] = Some("myString")

scala>validatedInput.get
// res1: String = "myString"

scala>validatedInput.getOrElse("empty")
// res2: String = "myString"

scala>validatedInput.fold("empty")(identity)
// res3: String = "myString"

...