Latest web development tutorials

Scala correspondência de padrão

Scala fornece um padrão poderoso mecanismo de correspondência, é também amplamente utilizado.

Um padrão correspondente contém uma série de alternativas, cada um dos quais começa com umcaso de palavras-chave.Cada um contém uma opção de backup e um padrão a uma pluralidade de expressões. Seta símbolo=> separa os padrões e expressões.

O que se segue é um exemplo simples valor inteiro padrão de correspondência:

object Test {
   def main(args: Array[String]) {
      println(matchTest(3))

   }
   def matchTest(x: Int): String = x match {
      case 1 => "one"
      case 2 => "two"
      case _ => "many"
   }
}

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

$ scalac Test.scala 
$ scala Test
many

coincidir com o Java correspondente no interruptor, mas escrito após a expressão selector.A saber: Selector jogo {} alternativas.

Por decisão de expressões para coincidir com o código escrito para tentar cada modo para completar o cálculo, se eles acham que há um caso de correspondência, combinando com o resto do caso, não vai continuar.

Em seguida olhamos para um tipo de correspondência de padrões de dados diferentes:

object Test {
   def main(args: Array[String]) {
      println(matchTest("two"))
      println(matchTest("test"))
      println(matchTest(1))
      println(matchTest(6))

   }
   def matchTest(x: Any): Any = x match {
      case 1 => "one"
      case "two" => 2
      case y: Int => "scala.Int"
      case _ => "many"
   }
}

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

$ scalac Test.scala 
$ scala Test
2
many
one
scala.Int

Os exemplos do primeiro caso corresponde a um valor inteiro de 1, o segundo caso corresponde ao valor de cadeia de dois, o segundo caso corresponde ao valor de cadeia de dois, o terceiro caso corresponde ao tipo de modelo utilizado para determinar se o valor transmitido em conjunto tipo, use isInstanceOf comparação para determinar o tipo, padrão de correspondência é melhor. O quarto caso indica as alternativas full-jogo padrão, ou correspondência não for encontrada no outro jogo, um interruptor semelhante no padrão.


Use Classe Sample

Utilizar a palavra-chave caso é a definição de classe é uma classe de amostra (aulas de caso), classe de exemplo é uma classe especial, otimizado para correspondência de padrão.

O que se segue é um exemplo simples de uma classe de exemplo:

object Test {
   def main(args: Array[String]) {
   	val alice = new Person("Alice", 25)
	val bob = new Person("Bob", 32)
   	val charlie = new Person("Charlie", 32)
   
    for (person <- List(alice, bob, charlie)) {
    	person match {
            case Person("Alice", 25) => println("Hi Alice!")
            case Person("Bob", 32) => println("Hi Bob!")
            case Person(name, age) =>
               println("Age: " + age + " year, name: " + name + "?")
         }
      }
   }
   // 样例类
   case class Person(name: String, age: Int)
}

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

$ scalac Test.scala 
$ scala Test
Hi Alice!
Hi Bob!
Age: 32 year, name: Charlie?

Quando você declara uma classe exemplo, o seguinte procedimento ocorre automaticamente:

  • Cada construtor de parâmetro estão se tornando val, a menos que explicitamente declarado como var, mas isso não é recomendado;
  • Fornecendo aplicar métodos de objetos associados, assim você pode construir objetos não podem usar a nova palavra-chave;
  • método de cancelar a aplicação fornecida permite a correspondência de padrão pode trabalhar;
  • Gerar toString, iguais, hashCode e método de cópia, a menos que o visor mostra as definições para esses métodos.