Как распаковать переменную типа Any, значение которой может быть Some (Some (значение может быть целым или строковым)) - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть переменная, которая может быть None или Some (None), Some (4) или Some (Some (4)). Как я могу распаковать, чтобы получить значение 4 или Нет, если нет значения?

1 Ответ

4 голосов
/ 06 февраля 2020

Это близко к тому, что запрашивается, но возвращает Option[Int] во всех случаях:

def recFlatten(a: Any): Option[Int] =
  a match {
    case i: Int => Some(i)
    case Some(x) => recFlatten(x)
    case _ => None
  }

Это вернет Some(i), если вложенное значение равно Int или None в противном случае.

Если вы действительно хотите вернуть Int вместо Some(Int), то результат должен быть Any, что усложнит последующую обработку:

def recFlatten(a: Any): Any =
  a match {
    case i: Int => i
    case Some(x) => recFlatten(x)
    case _ => None
  }

Это вернет значение Int или None.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...