Latest web development tutorials

extractor de Scala (extractor)

Extractor está configurado para extraer los parámetros del objeto que se ha pasado desde el objeto.

Scala biblioteca estándar contiene una serie de extractor predefinido, vamos a ver en ellas más o menos.

Scala es un método de extracción con un objeto de cancelar la aplicación. método de cancelar la aplicación considerado aplicar los métodos inversa: cancelar la aplicación acepta un objeto y extraer los valores del objeto, el valor del valor extraído se utiliza generalmente para construir el objeto.

El siguiente ejemplo demuestra el correo electrónico objeto de extracción:

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

Aplicación del código anterior, la salida es:

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

El objeto anterior define dosmétodos: aplicar métodos y anular la aplicación.No necesitamos aplicar el método mediante el operador new para crear objetos. Así que usted puede construir una cadena "[email protected]" por el Ensayo de declaración ( "Zara", "gmail.com").

método de cancelar la aplicación considerado aplicar los métodos inversa: cancelar la aplicación acepta un objeto y extraer los valores del objeto, el valor del valor extraído se utiliza generalmente para construir el objeto. Los ejemplos del método que utilizamos para extraer nombres de usuario y direcciones de correo electrónico Cancelar la aplicación de sufijos del objeto.

El método devuelve None cancelar la aplicación de dirección de correo electrónico entrante en lugar de una instancia de cadena. El código siguiente muestra:

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

Utiliza la extracción de coincidencia de patrones

Cuando creamos una instancia de una clase, puede tener cero o más parámetros, el compilador se invoca cuando una instancia del método se aplica. Podemos definir y aplicar el método en la clase de objeto.

Como hemos mencionado antes, utilizado cancelar la aplicación para extraer el valor especificamos para encontrar, por el contrario, se aplica la operación. Cuando usamos las declaraciones de equivalencia en el objeto de extracción es, cancelar la aplicación se llevará a cabo de forma automática, de la siguiente manera:

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
}

Aplicación del código anterior, la salida es:

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