스칼라 추출기
추출기는 전달된 객체에서 객체를 구성하는 데 사용되는 매개변수를 추출합니다.
Scala 표준 라이브러리에는 미리 정의된 추출기가 몇 가지 포함되어 있는데, 이에 대해 간단히 살펴보겠습니다.
Scala 추출기는 unapply 메소드를 사용하는 객체입니다. unapply 메소드는 apply 메소드의 반대 작업입니다. unapply는 객체를 승인한 다음 객체에서 값을 추출합니다. 추출된 값은 일반적으로 객체를 구성하는 데 사용되는 값입니다.
다음 예는 이메일 주소의 추출기 개체를 보여줍니다.
object Test { def main(args: Array[String]) { println ("Apply 方法 : " + apply("Zara", "gmail.com")); println ("Unapply 方法 : " + unapply("Zara@gmail.com")); println ("Unapply 方法 : " + unapply("Zara Ali")); } // 注入方法 (可选) def apply(user: String, domain: String) = { user +"@"+ domain } // 提取方法(必选) def unapply(str: String): Option[(String, String)] = { val parts = str split "@" if (parts.length == 2){ Some(parts(0), parts(1)) }else{ None } } }
위 코드를 실행하면 출력 결과는 다음과 같습니다.
$ scalac Test.scala $ scala Test Apply 方法 : Zara@gmail.com Unapply 方法 : Some((Zara,gmail.com)) Unapply 方法 : None
위 개체는 두 가지 메서드를 정의합니다. 🎜>적용 및 적용 취소 방법을 사용하세요. Apply 메소드를 사용하면 새로운 작업을 사용하지 않고도 객체를 생성할 수 있습니다. 따라서 Test("Zara", "gmail.com") 문을 통해 문자열 "Zara@gmail.com"을 구성할 수 있습니다.
unapply 메소드는 apply 메소드의 반대 작업입니다. unapply는 객체를 승인한 다음 객체에서 값을 추출합니다. 추출된 값은 일반적으로 객체를 구성하는 데 사용되는 값입니다. 우리가 사용하는 예에서는 Unapply 메소드는 객체에서 사용자 이름과 이메일 주소 접미사를 추출합니다. 인스턴스의 unapply 메소드는 수신 문자열이 이메일 주소가 아닌 경우 None을 반환합니다. 코드 데모는 다음과 같습니다.unapply("Zara@gmail.com") 相等于 Some("Zara", "gmail.com") unapply("Zara Ali") 相等于 None
추출기는 패턴 일치를 사용합니다클래스를 인스턴스화할 때 0개 이상의 매개변수를 가져올 수 있으며 컴파일러는 이를 인스턴스화합니다. 메소드가 호출됩니다. 클래스와 객체 모두에서 Apply 메서드를 정의할 수 있습니다. 앞서 언급했듯이 unapply는 찾기 위해 지정한 값을 추출하는 데 사용되며, 이는 apply의 반대입니다. 추출기 개체에서 match 문을 사용하면 다음과 같이 unapply가 자동으로 실행됩니다.
object Test { def main(args: Array[String]) { val x = Test(5) println(x) x match { case Test(num) => println(x + " 是 " + num + " 的两倍!") //unapply 被调用 case _ => println("无法计算") } } def apply(x: Int) = x*2 def unapply(z: Int): Option[Int] = if (z%2==0) Some(z/2) else None }위 코드를 실행하면 출력 결과는 다음과 같습니다.
$ scalac Test.scala $ scala Test 10 10 是 5 的两倍!