Скала экстрактор (экстрактор)
Экстрактор выполнен с возможностью извлечения параметров объекта, переданного ему от объекта.
стандартная библиотека Scala содержит ряд предопределенных экстрактор, мы будем смотреть на них грубо.
Scala является метод извлечения объекта с из Исключить. Метод считается исключить его применение методов обратного: принимает исключить его объект и извлекать значения из объекта, значение выведенного значения обычно используется для создания объекта.
Следующий пример демонстрирует объект извлечения почты:
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
Выше объект определяет дваметода: применяются и методы Исключить.Нам не нужно применять метод с помощью нового оператора для создания объектов. Таким образом, вы можете построить строку "[email protected]~~HEAD=dobj" с помощью теста на заявление ( "Zara", "gmail.com").
Метод считается исключить его применение методов обратного: принимает исключить его объект и извлекать значения из объекта, значение выведенного значения обычно используется для создания объекта. Примеры способа мы используем для извлечения суффикс имени пользователя исключить его и адреса электронной почты от объекта.
Метод не исключить его возвращает None в входящей электронной почты вместо экземпляра строки. Следующий код демонстрирует:
unapply("[email protected]") 相等于 Some("Zara", "gmail.com") unapply("Zara Ali") 相等于 None
Использует для сравнения с шаблоном извлечения
Когда мы создаем класс, вы можете взять ноль или более параметров, компилятор вызывается, когда экземпляр метода применяются. Мы можем определить и применить метод в объекте класса.
Как мы уже упоминали ранее, используется для исключить его извлечения значения указанным нами, чтобы найти, напротив, применяют операцию. Когда мы используем операторы соответствия в объекте экстракции, исключить его будет выполняться автоматически, следующим образом:
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 的两倍!