Scala reference

  • View
    848

  • Download
    7

Embed Size (px)

Text of Scala reference

  • 1.The Scala LanguageSpecicationVersion 2.9 DRAFT May 24, 2011 Martin Odersky P ROGRAMMING M ETHODS L ABORATORY EPFL S WITZERLAND

2. Contents1 Lexical Syntax31.1 Identiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41.2 Newline Characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51.3 Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 1.3.1 Integer Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.3.2 Floating Point Literals . . . . . . . . . . . . . . . . . . . . . . . . .9 1.3.3 Boolean Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.3.4 Character Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.3.5 String Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.3.6 Escape Sequences . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.3.7 Symbol literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.4 Whitespace and Comments . . . . . . . . . . . . . . . . . . . . . . . . . . 131.5 XML mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 Identiers, Names and Scopes 153 Types193.1 Paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.2 Value Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.2.1 Singleton Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.2.2 Type Projection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.2.3 Type Designators . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.2.4 Parameterized Types . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.2.5 Tuple Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.2.6 Annotated Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.2.7 Compound Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.2.8 Inx Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.2.9 Function Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3. iv CONTENTS3.2.10 Existential Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.3 Non-Value Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283.3.1 Method Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283.3.2 Polymorphic Method Types . . . . . . . . . . . . . . . . . . . . . . 293.3.3 Type Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.4 Base Types and Member Denitions . . . . . . . . . . . . . . . . . . . . . 29 3.5 Relations between types . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313.5.1 Type Equivalence . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313.5.2 Conformance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323.5.3 Weak Conformance . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.6 Volatile Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.7 Type Erasure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 Basic Declarations and Denitions37 4.1 Value Declarations and Denitions . . . . . . . . . . . . . . . . . . . . . 38 4.2 Variable Declarations and Denitions . . . . . . . . . . . . . . . . . . . . 39 4.3 Type Declarations and Type Aliases . . . . . . . . . . . . . . . . . . . . . 41 4.4 Type Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.5 Variance Annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.6 Function Declarations and Denitions . . . . . . . . . . . . . . . . . . . 464.6.1 By-Name Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . 474.6.2 Repeated Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . 484.6.3 Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494.6.4 Method Return Type Inference . . . . . . . . . . . . . . . . . . . . 50 4.7 Import Clauses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505 Classes and Objects53 5.1 Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535.1.1 Constructor Invocations . . . . . . . . . . . . . . . . . . . . . . . . 555.1.2 Class Linearization . . . . . . . . . . . . . . . . . . . . . . . . . . . 565.1.3 Class Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575.1.4 Overriding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585.1.5 Inheritance Closure . . . . . . . . . . . . . . . . . . . . . . . . . . 595.1.6 Early Denitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 4. CONTENTSv5.2 Modiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615.3 Class Denitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 5.3.1 Constructor Denitions . . . . . . . . . . . . . . . . . . . . . . . . 66 5.3.2 Case Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 5.3.3 Traits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695.4 Object Denitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716 Expressions736.1 Expression Typing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746.2 Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746.3 The Null Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756.4 Designators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756.5 This and Super . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766.6 Function Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 6.6.1 Named and Default Arguments . . . . . . . . . . . . . . . . . . . . 796.7 Method Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806.8 Type Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816.9 Tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816.10 Instance Creation Expressions . . . . . . . . . . . . . . . . . . . . . . . . 816.11 Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 826.12 Prex, Inx, and Postx Operations . . . . . . . . . . . . . . . . . . . . . 83 6.12.1 Prex Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 6.12.2 Postx Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 6.12.3 Inx Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 6.12.4 Assignment Operators . . . . . . . . . . . . . . . . . . . . . . . . . 856.13 Typed Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 866.14 Annotated Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 866.15 Assignments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 866.16 Conditional Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886.17 While Loop Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886.18 Do Loop Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886.19 For Comprehensions and For Loops . . . . . . . . . . . . . . . . . . . . . 896.20 Return Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 5. vi CONTENTS 6.21 Throw Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 6.22 Try Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 6.23 Anonymous Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 6.24 Constant Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 6.25 Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 6.26 Implicit Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 966.26.1 Value Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . 966.26.2 Method Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . 976.26.3 Overloading Resolution . . . . . . . . . . . . . . . . . . . . . . . . 976.26.4 Local Type Inference . . . . . . . . . . . . . . . . . . . . . . . . . . 1006.26.5 Eta Expansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1027 Implicit Parameters and Views 105 7.1 The Implicit Modier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 7.2 Implicit Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 7.3 Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 7.4 Context Bounds and View Bounds . . . . . . . . . . . . . . . . . . . . . . 110 7.5 Manifests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1118 Pattern Matching113 8.1 Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1138.1.1 Variable Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1148.1.2 Typed Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1148.1.3 Pattern Binders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1148.1.4 Literal Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1158.1.5 Stable Identier Patterns . . . . . . . . . . . . . . . . . . . . . . . 1158.1.6 Constructor Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . 1158.1.7 Tuple Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1168.1.8 Extractor Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1168.1.9 Pattern Sequences . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178.1.10 Inx Operation Patterns . . . . . . . . . . . . . . . . . . . . . . . . 1178.1.11 Pattern Alternatives . . . . . . . . . . . . . . . . . . . . . . . . . . 1188.1.12 XML Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1188.1.13 Regular Expression Patterns . . . . . . . . . . . . . . . . .