Latest web development tutorials

스칼라 추출기 (추출기)

추출기 물체로부터 전달 된 객체의 매개 변수를 추출하도록 구성된다.

스칼라 표준 라이브러리는 미리 정의 된 추출기의 수를 포함, 우리는 대략들을 살펴 보겠습니다.

스칼라의 적용 취소와 객체 추출 방법이다. 간주 적용된 방법은 방법 역방향 적용 적용된 객체로부터 객체를 추출 값을 받아, 상기 추출 된 값의 값은 일반적으로 객체를 생성하는 데 사용된다.

다음의 예는 추출 대상 메일 주소를 보여

object Test {
   def main(args: Array[String]) {
      
      println ("Apply 方法 : " + apply("Zara", "gmail.com"));
      println ("Unapply 方法 : " + unapply("[email protected]"));
      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 方法 : [email protected]
Unapply 方法 : Some((Zara,gmail.com))
Unapply 方法 : None

적용과적용 취소 방법 : 위의목적은 두 가지방법을정의합니다. 우리는 개체를 만들 new 연산자를 사용하여 방법을 적용 할 필요가 없습니다. 그래서 당신은 문 테스트 ( "자라", "gmail.com")에 의해 문자열 "[email protected]"를 구성 할 수 있습니다.

간주 적용된 방법은 방법 역방향 적용 적용된 객체로부터 객체를 추출 값을 받아, 상기 추출 된 값의 값은 일반적으로 객체를 생성하는 데 사용된다. 이 방법의 예는 우리는 개체에서 접미사 적용된 사용자 이름과 전자 메일 주소를 추출하기 위해 사용합니다.

적용 취소 방법은받는 전자 메일 주소 대신 문자열 인스턴스 없음을 반환하지 않습니다. 다음 코드는 보여줍니다

unapply("[email protected]") 相等于 Some("Zara", "gmail.com")
unapply("Zara Ali") 相等于 None

패턴 매칭 추출을 사용합니다

우리는 클래스를 인스턴스화 할 때 컴파일러의 인스턴스가 방법을 적용 할 때 호출되는 0 개 이상의 매개 변수를 취할 수 있습니다. 우리는 정의와 클래스 객체의 방법을 적용 할 수 있습니다.

우리가 전에 언급 한 바와 같이, 적용 취소는 작업을 적용 반대로, 우리가 찾을 지정한 값을 추출하는 데 사용됩니다. 우리가 추출 객체의 일치 문을 사용하는 경우 다음과 같이 적용 취소, 자동으로 수행 될 것입니다 :

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 的两倍!