Scalaのオプション(オプション)
Scalaのオプション(オプション)値を表すために使用されるタイプは、(値または値なしの場合)はオプションです。
オプション[T]はコンテナオプションの値Tのタイプである:あなたが存在しない場合、値が存在する場合は、オプション[T]はいくつかの[T]で、オプション[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 1は、キータイプがStringである文字列型の値(ハッシュマップですが、彼のgetと同じではありません)という名前のオプション[文字列]カテゴリを返します。
Scalaのあなたに伝えオプション[文字列]を使用して: "私は文字列を返すようにしようとしますが、それはあなたの文字列を与えていない可能性があります。」
MYMAPは、このデータをKEY2ていなかった、get()メソッドはNoneを返します。
オプション2つのサブカテゴリ、1いくつかのいずれかが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()メソッド
あなたがNoneにタプルの要素かどうかを検出するためのisEmpty()メソッドを使用することができ、次のように、例を示します。
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:ブール オプションのタイプ値はNoneに、これはそうでない場合は、ケースがtrueを返す偽であるか否かを検出します |
3 | デフproductArity:のInt 要素の数は、Aは(X_1、...、x_k)、Kを返す返します |
4 | デフproductElement(N:INT):どれでも ゼロから始まる、指定されたオプションを取得します。 すなわち(X_1、...、x_k)、X_返す(N + 1)、0 <N <K。 |
5 | デフ(:(A)は、pが存在するブール:=>ブール値) 条件が要素を指定したかどうかのオプションが存在しない場合にはどれもそうでない場合はfalseを返し、trueを返しません。 |
6 | (:(A)は、pデフフィルタ =>ブール):オプションを[A] オプションに値が含まれている場合コン、真のリターンをフィルタリングするために渡され、フィルタは、いくつかのインスタンスを返します。 それ以外の場合、戻り値はNoneです。 |
7 | デフfilterNot(P:(A) =>ブール):オプション[A] オプションに値が含まれている場合コン、および偽のリターンをフィルタリングするために渡され、フィルタは、いくつかのインスタンスを返します。 それ以外の場合、戻り値はNoneです。 |
8 | デフflatMap [B](F: (A)=>オプション[B]):オプション[B] オプションが値を持っている場合、それ以外の場合は、Noneを返し、処理した後に復帰するF関数に渡さ |
9 | デフのforeach [U](F: (A)=> U):ユニット オプションに値が含まれている場合は、それぞれの値は、関数fに渡された、または処理されていません。 |
10 | デフgetOrElse [B>:A] (デフォルト:=> B):B オプションに値がある場合は、オプションの値が返され、そうでない場合はデフォルト値が設定します。 |
11 | デフisDefined:ブール オプションの値は、いくつかのtrueを返しインスタンスである場合、それ以外の場合はfalseを返します。 |
12 | デフイテレータ:イテレータ[A] オプションは、値、オプションの値の反復を持っている場合。 オプションの値が空の場合、空の反復子を返します。 |
13 | DEFマップ[B](F: (A)=> B):オプション[B] オプションは、いくつかの後処理関数fによって返された値を、含まれている場合は、そうでない場合はNoneを返します |
14 | デフorElse [B>:A] (代替:=>オプション[B]):オプション[B] オプションがNoneの場合、orElse方法は、そうでなければ、それはオプションに直接返し、名前でパラメータの値を返します。 |
15 | デフorNull オプションが含まれている場合はオプションの値は、そうでない場合はnullを返し、値を返します。 |