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이고 값의 타입이 String인 해시 맵이지만, 그의 get()이 반환하는 것은 Option[String]이라는 카테고리입니다.
Scala 使用 Option[String] 来告诉你:「我会想办法回传一个 String,但也可能没有 String 给你」。
myMap 里并没有 key2 这笔数据,get() 方法返回 None。
Option 有两个子类别,一个是 Some,一个是 None,当他回传 Some 的时候,代表这个函式成功地给了你一个 String,而你可以透过 get() 这个函式拿到那个 String,如果他返回的是 None,则代表没有字符串可以给你。
另一个示例:
object Test {
def main(args: Array[String]) {
val sites = Map40;"w3codebox" -> "ko.oldtoolbag.com", "google" -> "www.google.com"41;
println("sites.get( "w3codebox\" ) : " + 0;sites.get40; "w3codebox"41;) // Some(ko.oldtoolbag.com)
println("sites.get( "baidu" ) : " + 0;sites.get40; "baidu"41;) // None
}
}
위 코드를 실행하면 다음과 같은 출력 결과가 나타납니다:
$ scalac Test.scala $ scala Test sites.get( "w3codebox" ) : Some(ko.oldtoolbag.com) sites.get( "baidu" ) : None
你也可以通过模式匹配来输出匹配值。示例如下:
object Test {
def main(args: Array[String]) {
val sites = Map40;"w3codebox" -> "ko.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")) : ko.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인지 확인합니다. 그렇다면 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](기본: => 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](대체: => Option[B]): Option[B] Option이 None이면, orElse 메서드는 전달된 명명된 매개변수의 값을 반환하고, 그렇지 않으면 그 Option을 직접 반환합니다. |
15 |
def orNull 선택 사항이 값이 포함되어 있으면 선택 사항 값을 반환하고, 그렇지 않으면 null을 반환합니다. |