English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
ScalaのOption(オプション)タイプは、値が選択可能(存在するかどうか)を表すために使用されます。
Option[T]は、Tのタイプの選択可能な値のコンテナです:値が存在する場合、Option[T]はSome[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のタイプのKeyとStringのタイプのValueを持つhash mapですが、get()メソッドがOption[String]というクラスを返却するのが異なります。
Scala は Option[String] を使用して「String を返すことを試みますが、String が提供されない可能性があります」と伝えます。
myMap には key がありません2 このデータでは、get() メソッドが None を返します。
Option には二つのサブカテゴリーがあります。一つは Some、もう一つは None です。その関数が Some を返した場合、この関数が成功して String をあなたに提供したことを意味し、get() 関数を通じてその String を取得することができます。その場合に None が返された場合は、String が提供されないことを意味します。
另一个示例:
object Test {
def main(args: Array[String]) {
val sites = Map40;"w3codebox" -> "ja.oldtoolbag.com", "google" -> "www.google.com"41;
println("sites.get( "w3codebox\" ) : " + 0;sites.get40; "w3codebox"41;) // Some(ja.oldtoolbag.com)
println("sites.get( "baidu" ) : " + 0;sites.get40; "baidu"41;) // None
}
}
上記のコードを実行すると、以下の結果が得られます:
$ scalac Test.scala $ scala Test sites.get( "w3codebox" ) : Some(ja.oldtoolbag.com) sites.get( "baidu" ) : None
你也可以通过模式匹配来输出匹配值。示例如下:
object Test {
def main(args: Array[String]) {
val sites = Map40;"w3codebox" -> "ja.oldtoolbag.com", "google" -> "www.google.com"41;
println("show(sites.get( "w3codebox\")) : " +
show40;sites.get40; "w3codebox"41;) )
println("show(sites.get( "baidu")) : " +
show40;sites.get40; "baidu"41;) )
}
def show40;x: Option91;String]) = x match123;
case Some40;s) => s
case None => "?"
}
}
上記のコードを実行すると、以下の結果が得られます:
$ scalac Test.scala $ scala Test show(sites.get( "w3codebox")) : ja.oldtoolbag.com show(sites.get( "baidu")) : ?
你可以使用 getOrElse() 方法来获取元组中存在的元素或者使用其默认的值,示例如下:
object Test {
def main(args: Array[String]) {
val a:Option[Int] = Some(5)
val b:Option[Int] = None
println("a.getOrElse(0): " + a.getOrElse40;0) )
println("b.getOrElse(10): " + b.getOrElse40;10) )
}
}
上記のコードを実行すると、以下の結果が得られます:
$ scalac Test.scala $ scala Test a.getOrElse(0): 5 b.getOrElse(10): 10
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 Optionの常用メソッドを示します:
序号 | メソッド及び説明 |
---|---|
1 |
def get: A オプションの値を取得します |
2 |
def isEmpty: Boolean オプションの型の値がNoneかどうかを検出し、それがNoneの場合はtrue、それ以外の場合はfalseを返します。 |
3 |
def productArity: Int 要素の数を返します、A(x_1, ..., x_k), 返却 k |
4 |
def productElement(n: Int): Any 指定されたオプションを取得し、0から始めます。つまり A(x_1, ..., x_k), 返却 x_(n+1) 、 0 < n < k. |
5 |
def exists(p: (A) => Boolean): Boolean 指定された条件に一致する要素がオプションに存在し、Noneでない場合にtrueを返します。それ以外の場合、falseを返します。 |
6 |
def filter(p: (A) => Boolean): Option[A] オプションが値を含んでおり、filterに渡された条件関数がtrueを返した場合、filterはSomeサンプルを返します。それ以外の場合、返り値はNoneです。 |
7 |
def filterNot(p: (A) => Boolean): Option[A] オプションが値を含んでおり、filterに渡された条件関数がfalseを返した場合、filterはSomeサンプルを返します。それ以外の場合、返り値はNoneです。 |
8 |
def flatMap[B](f: (A) => Option[B]): Option[B] オプションが値を含む場合、関数 f で処理後を返します。それ以外の場合は None を返します。 |
9 |
def foreach[U](f: (A) => U): Unit オプションが値を含む場合、各値を関数 f に渡します。それ以外の場合は処理しません。 |
10 |
def getOrElse[B >: A](default: => B): B オプションが値を含む場合、オプションの値を返します。それ以外の場合は設定されたデフォルト値を返します。 |
11 |
def isDefined: Boolean オプションの値が Some の場合 true を返します。それ以外の場合は false を返します。 |
12 |
def iterator: Iterator[A] オプションが値を含む場合、オプションの値をイテレートします。オプションが空の場合は、空のイテレータを返します。 |
13 |
def map[B](f: (A) => B): Option[B] オプションが値を含む場合、関数 f で処理された Some を返します。それ以外の場合は None を返します。 |
14 |
def orElse[B >: A](alternative: => Option[B]): Option[B] Option が None であれば、orElse メソッドは引数の値を返します。それ以外の場合は、その Option を直接返します。 |
15 |
def orNull オプションが値を含む場合、オプションの値を返します。それ以外の場合は null を返します。 |