Хоча всі вищезазначені та наведені нижче відповіді чудово відповідають на початкове запитання, деяку додаткову інформацію можна знайти в документації https://docs.scala-lang.org/tour/pattern-matching.html , у моєму випадку вони не підходили. але оскільки ця відповідь stackoverflow є першою пропозицією в Google, я хотів би опублікувати свою відповідь, яка є кутовим випадком вищезазначеного питання.
Моє запитання:
- Як використовувати захист у виразі відповідності з аргументом функції?
Що можна перефразовувати:
- Як використовувати оператор if у виразі відповідності з аргументом функції?
Відповідь - приклад коду нижче:
def drop[A](l: List[A], n: Int): List[A] = l match {
case Nil => sys.error("drop on empty list")
case xs if n <= 0 => xs
case _ :: xs => drop(xs, n-1)
}
посилання на скрипту масштабу: https://scalafiddle.io/sf/G37THif/2,
як ви бачите, що case xs if n <= 0 => xs
оператор може використовувати n (аргумент функції) з оператором guard (якщо).
Я сподіваюся, що це допомагає комусь, як я.
case x if x.size > 2 => ...