Scala Option (Опция)
Scala Option (Опция) типа используется для представления значения не является обязательным (для значения или нет значения).
Опция [T] представляет собой тип контейнера факультативное значение T: Если значение существует, Option [T] является не Некоторые [T], если вы не существует, Option [T] является объектом None.
Далее мы рассмотрим кусок кода:
// 虽然 Scala 可以不定义变量的类型,不过为了清楚些,我还是 // 把他显示的定义上了 val myMap: Map[String, String] = Map("key1" -> "value") val value1: Option[String] = myMap.get("key1") val value2: Option[String] = myMap.get("key2") println(value1) // Some("value1") println(value2) // None
В приведенном выше коде, MyMap один ключевой тип String, String Тип значения является хэш-карта, но не то же самое, как его получить () возвращает категорию с именем Опция [String].
Scala с помощью опции [String], чтобы сказать вам: "Я буду стараться возвращать строку, но она не может дать вам строки."
MyMap не Клавишу2 эти данные, получаем () метод возвращает None.
Вариант два подкатегорий, один Кто-то его нет, когда он вернется Часть времени, от имени этой функции успешно дал вам строку, и вы можете () функцию, чтобы получить это через строку получить, Если он не возвращает None, оно представляет собой не строка не может дать вам.
Другой пример:
object Test { def main(args: Array[String]) { val sites = Map("w3big" -> "www.w3big.com", "google" -> "www.google.com") println("sites.get( \"w3big\" ) : " + sites.get( "w3big" )) // Some(www.w3big.com) println("sites.get( \"baidu\" ) : " + sites.get( "baidu" )) // None } }
Реализация указанного выше кода, выход:
$ scalac Test.scala $ scala Test sites.get( "w3big" ) : Some(www.w3big.com) sites.get( "baidu" ) : None
Вы можете также выводить в соответствии со значением путем сопоставления с образцом. Примерами могут служить следующие:
object Test { def main(args: Array[String]) { val sites = Map("w3big" -> "www.w3big.com", "google" -> "www.google.com") println("show(sites.get( \"w3big\")) : " + show(sites.get( "w3big")) ) println("show(sites.get( \"baidu\")) : " + show(sites.get( "baidu")) ) } def show(x: Option[String]) = x match { case Some(s) => s case None => "?" } }
Реализация указанного выше кода, выход:
$ scalac Test.scala $ scala Test show(sites.get( "w3big")) : www.w3big.com show(sites.get( "baidu")) : ?
Метод getOrElse ()
Вы можете использовать метод getOrElse (), чтобы получить кортеж, который существует или использовать значения по умолчанию, примеры заключаются в следующем:
object Test { def main(args: Array[String]) { val a:Option[Int] = Some(5) val b:Option[Int] = None println("a.getOrElse(0): " + a.getOrElse(0) ) println("b.getOrElse(10): " + b.getOrElse(10) ) } }
Реализация указанного выше кода, выход:
$ scalac Test.scala $ scala Test a.getOrElse(0): 5 b.getOrElse(10): 10
Метод IsEmpty ()
Вы можете использовать метод IsEmpty () для определения, является ли кортеж элемент в None, примеры являются следующие:
object Test { def main(args: Array[String]) { val a:Option[Int] = Some(5) val b:Option[Int] = None println("a.isEmpty: " + a.isEmpty ) println("b.isEmpty: " + b.isEmpty ) } }
Реализация указанного выше кода, выход:
$ scalac Test.scala $ scala Test a.isEmpty: false b.isEmpty: true
Scala Вариант распространенный метод
В следующей таблице перечислены опции Scala часто используемые методы:
Нет. | Метод и Описание |
---|---|
1 | Защиту получаете: Получить дополнительную ценность |
2 | Защиту IsEmpty: Boolean Дополнительное значение типа обнаружения ли None, это так возвращает истину, иначе ложь |
3 | Защиту productArity: Int Возвращает число элементов, A (x_1, ..., x_k) возвращает K |
4 | Защиту productElement (п: Int): Любой Получает заданные параметры, начиная с нуля. А именно А (x_1, ..., x_k), вернуть X_ (п + 1), 0 <п <к. |
5 | Защиту существует (р: (А) => Boolean): Boolean Если опция указана ли условия элемент существует и не Нет возвращает истину, в противном случае она возвращает ложь. |
6 | Защиту фильтр (р: (А) => Boolean): Опция [A] Con Если параметр содержит значение, и передается фильтр возвращает истинный, фильтр возвращает некоторых случаях. В противном случае возвращается значение Нет. |
7 | Защиту filterNot (р: (А) => Boolean): Опция [A] Con Если параметр содержит значение, и передается фильтр возвращает ложь, фильтр возвращает некоторых случаях. В противном случае возвращается значение Нет. |
8 | Защиту flatMap [B] (F: (A) => Опция [B]): Опция [B] Если параметр имеет значение, а затем передается функции ф возвращается после лечения, в противном случае она возвращает None |
9 | Защиту Foreach [U] (F: (A) => U): Unit Если параметр содержит значение, то каждое значение передается функции F, или не лечить. |
10 | Защиту getOrElse [B>: A] ( по умолчанию: => B): B Если параметр имеет значение, то значение параметра возвращается, в противном случае установить значения по умолчанию. |
11 | Защиту isDefined: Boolean Если факультативное значение является экземпляром Некоторые возвращает истину, в противном случае возвращает ложь. |
12 | Защиту итератора: Итератор [A] Если параметр имеет значение, необязательное значение итерации. Если дополнительное значение пустое пустой итератора возвращается. |
13 | Защиту карту [B] (F: (A) => B): Опция [B] Если параметр содержит значение, возвращаемое функцией ф Некоторые пост-обработки, в противном случае не возвращать None |
14 | Защиту OrElse [B>: A] (альтернативный вариант: => Опция [B]): Опция [B] Если опция не является None, метод OrElse возвращает значение параметра по имени, в противном случае, она возвращает непосредственно к Option. |
15 | защиту orNull Если опция содержит значения параметров возвращаемого значения, в противном случае вернуть NULL. |