Latest web development tutorials

Scala сопоставления с образцом

Scala предоставляет мощный механизм сопоставления с образцом, также широко используется.

Шаблона согласования содержит ряд альтернатив, каждая из которых начинается с ключевого словаслучае.Каждый из них содержит опцию резервного копирования и шаблон для множества выражений. Стрелка символ=> отделяет шаблоны и выражения.

Ниже приводится соответствие простой шаблон целое значение Пример:

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

Реализация указанного выше кода, выход:

$ scalac Test.scala 
$ scala Test
many

совпадают с соответствующими Java в коммутаторе, но написана после выражения селектора.А именно: Селектор матч {} альтернативы.

По заказу выражения для сравнения кода, написанного попробовать каждый режим, чтобы завершить расчет, если они находят есть соответствующий случай, сопоставив остальные дела не будет продолжаться.

Далее мы рассмотрим другой тип данных сопоставления с шаблоном:

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

Реализация указанного выше кода, выход:

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

Примеры первого случая соответствует целому значению 1, второй случай соответствует значению строки из двух, второй случай соответствует значению строки из двух, третий случай соответствует типу используемой модели, чтобы определить, является ли прошло значение в целом тип, использование isInstanceOf по сравнению определить тип, соответствующий шаблон лучше. Четвертый случай показывает, по умолчанию альтернатив полный матч, что матч не найден в другом матче, подобный переключатель находится в умолчанию.


Использование образца Class

Используйте ключевое слово случай является определение класса класс выборки (тематические классы), класс образец представляет собой специальный класс, оптимизированный для сопоставления с образцом.

Ниже приведен простой пример класса образца:

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

Реализация указанного выше кода, выход:

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

Когда вы объявляете пример класса, следующая процедура происходит автоматически:

  • Каждый конструктор параметр становится Вэл, если явно не объявлена ​​как вар, но это не рекомендуется;
  • Обеспечение применения методов, связанных объектов, так что вы можете создавать объекты не могут использовать новое ключевое слово;
  • При условии, метод позволяет исключить его сопоставления с образцом может работать;
  • Сформировать ToString, равна, хэш-код и способ копирования, если дисплей не покажет определения для этих методов.