Latest web development tutorials

Scala extractor (extrator)

Extractor é configurado para extrair os parâmetros do objecto transmitido a ele a partir do objecto.

Scala biblioteca padrão contém um número de extractor pré-definido, vamos olhar para eles mais ou menos.

Scala é um método de extracção com um objecto de cancelar a aplicação. método de cancelar a aplicação considerada aplicar métodos reversa: cancelar a aplicação aceita um objeto e extrair valores a partir do objeto, o valor do valor extraído é geralmente usado para construir o objeto.

O exemplo a seguir demonstra o endereço de correio objeto de extração:

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
      }
   }
}

Implementação do código acima, a saída é:

$ scalac Test.scala 
$ scala Test
Apply 方法 : [email protected]
Unapply 方法 : Some((Zara,gmail.com))
Unapply 方法 : None

O objeto acima define doismétodos: aplicar e métodos de cancelar a aplicação.Nós não precisamos de aplicar o método usando o operador new para criar objetos. Assim, você pode construir uma cadeia "[email protected]" pelo Teste de declaração ( "Zara", "gmail.com").

método de cancelar a aplicação considerada aplicar métodos reversa: cancelar a aplicação aceita um objeto e extrair valores a partir do objeto, o valor do valor extraído é geralmente usado para construir o objeto. Exemplos do método que usamos para extrair o nome de usuário e e-mail endereços Ignorar sufixo do objeto.

O método cancelar a aplicação retorna None no endereço de e-mail de entrada, em vez de uma instância de string. O código a seguir demonstra:

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

Usa padrão de extração de correspondência

Quando instanciar uma classe, você pode ter zero ou mais parâmetros, o compilador é chamado quando uma instância do método aplicado. Podemos definir e aplicar o método no objeto de classe.

Como mencionamos antes, cancelar a aplicação usada para extrair o valor que especificar para encontrar, pelo contrário, aplicam-se a operação. Quando usamos as declarações de correspondência no objeto de extracção é, cancelar a aplicação será realizada automaticamente, como segue:

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
}

Implementação do código acima, a saída é:

$ scalac Test.scala 
$ scala Test
10
10 是 5 的两倍!