2014-11-12 2 views
0

По определению:Каковы классы занятий в 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?

+1

«экспортировать параметры своего конструктора», я думаю, просто причудливый способ сказать «действовать так, как будто все их параметры конструктора были объявлены« val ». Вы можете сопоставлять совпадение 'List' и' Stream', потому что их * companion objects * определяют методы 'unapply' или' unapplySeq'. Вы можете сделать это «вручную», чтобы создать «нормальный» класс, который может быть сопоставлен с образцом, но для класса case объект-компаньон с этими методами будет автогенерирован. Если ваш класс не имеет сопутствующего объекта с 'unapply' или' unapplySeq', вы не можете сопоставить шаблон; 'class A (s: String); x match {case A (y)} 'не будет компилироваться. – lmm

+0

@ lmm О, я не знал об этом. Итак, если у вас есть простой класс в scala, в котором ничего не написано, вы не можете использовать шаблон для него? – Bula

+0

Вы можете по-прежнему сопоставлять совпадение, как 'case a: A => a.s', но вы не можете выполнить шаблон« destructuring »match« case A (y) => y'. – lmm

ответ

1

класс Case отличается от обычного класса в следующих ways-

1) Вы можете создать экземпляр класса без дела нового ключевого слова

2) Вы можете сделать шаблон согласования с футляром класса

3) Параметры конструктора классов case рассматриваются как общедоступные значения и могут быть доступны непосредственно как:

аннотация класс Срок

случае класс вар (название: String) расширяет срок

вал х = Var ("х") Println (x.name)

http://docs.scala-lang.org/tutorials/tour/case-classes.html Пожалуйста, обратитесь и http://www.scala-lang.org/old/node/258

Для получения более подробной информации о случае классы

Смежные вопросы