a match {
case Some(myType) => {
// do things
}
}
Вот мой код на Scala и нет
case None =>
case _ =>
Линия.
Мне нужно добавить эти строки по умолчанию? Или можно их пропустить?
2 ответа
a match {
case Some(myVal) => // do something with myVal
}
Это будет скомпилировано с предупреждением ...
Предупреждение: совпадение может быть неполным.
... потому что компилятор знает, что a
может иметь значение, которое не покрывается, и если это произойдет, этот код выдаст ошибку времени выполнения.
a match {
case Some(myVal) => // do something with myVal
case _ => // universal default; do something else
}
Это компилируется без предупреждения, поскольку предлагает универсальное значение по умолчанию.
a match {
case Some(myVal) => // do something with myVal
case None => // do something else
}
Это также компилируется без предупреждения, потому что компилятор достаточно умен, чтобы знать, что Option
может иметь только два состояния: None
и Some(value)
ПРИМЕЧАНИЕ. Все это, конечно, применимо, только если a
является Option[_]
. В противном случае case Some()
и case None
не имеют смысла и не будут компилироваться.
Да, и просто охватить все базы ...
a match {
case Some(myVal) => // do something with myVal
case None => // do something else
case _ => // redundant; unreachable code
}
В его нынешнем виде код выдает MatchError
, если a
не равно Some[T]
. Вы можете избежать этого, добавив универсальный случай
a match {
case Some(myType) => {
// do things
}
case _ =>
}
Это ничего не даст, если a
имеет тип None
или не является типом Option
. Если вы знаете, что a
- это Option
, то использование foreach
сделает то же самое, но более аккуратно.
a.foreach { myType =>
// do some things
}
Примечание
Это будет соответствовать любому типу Option
. Чтобы выбрать конкретный тип Option
, вам необходимо указать внутренний тип Option
a match {
case Some(i: Int) =>
// Do something with an int
case Some(s: String) =>
// Do something with a string
case _ =>
// Handle error condition
}
Похожие вопросы
Новые вопросы
scala
Scala - это язык программирования общего назначения, в основном предназначенный для виртуальной машины Java. Разработанный для краткого, элегантного и безопасного для типов представления общих шаблонов программирования, он сочетает в себе как императивный, так и функциональный стили программирования. Его ключевые особенности: продвинутая система статического типа с выводом типа; типы функций; сопоставления с образцом ; неявные параметры и преобразования; перегрузка оператора; полная совместимость с Java; совпадение