File tree Expand file tree Collapse file tree 3 files changed +45
-0
lines changed
compiler/test/dotty/tools/dotc/reporting
docs/docs/reference/enums Expand file tree Collapse file tree 3 files changed +45
-0
lines changed Original file line number Diff line number Diff line change @@ -19,6 +19,20 @@ class ErrorMessagesTests extends ErrorMessagesTest {
1919 checkMessagesAfter(FrontEnd .name)(""" class Foo""" )
2020 .expectNoErrors
2121
22+ @ Test def caseClassExtendsEnum =
23+ checkMessagesAfter(RefChecks .name) {
24+ """
25+ |enum Foo {}
26+ |case class Bar() extends Foo
27+ """ .stripMargin
28+ }
29+ .expect { (ictx, messages) ⇒
30+ implicit val ctx : Context = ictx
31+ assertMessageCount(1 , messages)
32+ val errorMsg = messages.head
33+ assertEquals(" normal case class Bar in package <empty> cannot extend an enum" , errorMsg.msg)
34+ }
35+
2236 @ Test def typeMismatch =
2337 checkMessagesAfter(FrontEnd .name) {
2438 """
Original file line number Diff line number Diff line change @@ -88,6 +88,35 @@ object Planet {
8888 println(s " Your weight on $p is ${p.surfaceWeight(mass)}" )
8989 }
9090}
91+ ```
92+ ### A specific use case of enum
93+
94+ Two enums can be combined into a different type as shown below:
95+
96+ ``` scala
97+
98+ trait Animal
99+ object Animal {
100+ def enumValues : Iterable [Animal ] = Dog .enumValues ++ Cat .enumValues
101+ def enumValueNamed = Dog .enumValueNamed ++ Cat .enumValueNamed
102+ }
103+
104+ enum Dog extends Animal {
105+ case GermanShepherd , Labrador , Boxer
106+ }
107+
108+ enum Cat extends Animal {
109+ case PersianCat , Ragdoll , ScottishFold
110+ }
111+
112+ object Main {
113+ def main (args : Array [String ]): Unit = {
114+ val values : Iterable [Animal ] = Animal .enumValues
115+ val boxer_dog : Animal = Animal .enumValueNamed(" Boxer" )
116+ val ragdoll_cat : Animal = Animal .enumValueNamed(" Ragdoll" )
117+ }
118+ }
119+
91120```
92121
93122### Implementation
Original file line number Diff line number Diff line change 1+ enum Foo {}
2+ enum Bar extends Foo {} // error
You can’t perform that action at this time.
0 commit comments