По определению:Каковы классы занятий в Scala?
Scala поддерживает понятие классов корпуса. Классы классов - это обычные классы, которые экспортируют свои параметры конструктора и обеспечивают механизм рекурсивного декомпозиции с помощью сопоставления с образцом.
Что такое смысл регулярных классов, которые экспортируют свои параметры конструктора?
В общем, я понимаю, как вы можете использовать them.So вы можете иметь что-то в строках этого:
abstract Class Vehicle
case class Car extends Vehicle
case class Plane extends Vehicle
case class SpaceShip extends Vehicle
А затем применить по шаблону на каждом Vehicle
, чтобы увидеть, что именно это, однако, ISN» Это возможно со всеми классами?
x match {
case List(x): something
case Stream(x): something else
}
Так что главное отличие при написании case class
вместо того, чтобы просто class
?
«экспортировать параметры своего конструктора», я думаю, просто причудливый способ сказать «действовать так, как будто все их параметры конструктора были объявлены« val ». Вы можете сопоставлять совпадение 'List' и' Stream', потому что их * companion objects * определяют методы 'unapply' или' unapplySeq'. Вы можете сделать это «вручную», чтобы создать «нормальный» класс, который может быть сопоставлен с образцом, но для класса case объект-компаньон с этими методами будет автогенерирован. Если ваш класс не имеет сопутствующего объекта с 'unapply' или' unapplySeq', вы не можете сопоставить шаблон; 'class A (s: String); x match {case A (y)} 'не будет компилироваться. – lmm
@ lmm О, я не знал об этом. Итак, если у вас есть простой класс в scala, в котором ничего не написано, вы не можете использовать шаблон для него? – Bula
Вы можете по-прежнему сопоставлять совпадение, как 'case a: A => a.s', но вы не можете выполнить шаблон« destructuring »match« case A (y) => y'. – lmm