ScalaReference.pdf

(1231 KB) Pobierz
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
The Scala Language
Specification
Version 2.7
DRAFT
March 15, 2009
Martin Odersky
P ROGRAMMING M ETHODS L ABORATORY
EPFL
S WITZERL AND
842363875.001.png 842363875.002.png
Contents
1
Lexical Syntax
3
1.1
Identifiers
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
1.2
Newline Characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
1.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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
1.4
Whitespace and Comments . . . . . . . . . . . . . . . . . . . . . . . . . .
12
1.5
XML mode
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
2
Identifiers, Names and Scopes
15
3
Types
17
3.1
Paths
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
3.2
Value Types
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
3.2.1
Singleton Types
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.2.2
Type Projection
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.2.3
Type Designators
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.2.4
Parameterized Types . . . . . . . . . . . . . . . . . . . . . . . . . .
20
3.2.5
Tuple Types
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
3.2.6
Annotated Types
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
3.2.7
Compound Types . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
3.2.8
Infix Types
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
3.2.9
Function Types
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
iv
CONTENTS
3.2.10 Existential Types
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
3.2.11 Primitive Types Defined in Predef
. . . . . . . . . . . . . . . . . .
26
3.3
Non-Value Types
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
3.3.1
Method Types
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
3.3.2
Polymorphic Method Types . . . . . . . . . . . . . . . . . . . . . .
27
3.3.3
Type Constructors
. . . . . . . . . . . . . . . . . . . . . . . . . . .
27
3.4
Base Types and Member Definitions . . . . . . . . . . . . . . . . . . . . .
28
3.5
Relations between types
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
3.5.1
Type Equivalence . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
3.5.2
Conformance
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
3.6
Volatile Types
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
3.7
Type Erasure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
4
Basic Declarations and Definitions
35
4.1
Value Declarations and Definitions
. . . . . . . . . . . . . . . . . . . . .
35
4.2
Variable Declarations and Definitions . . . . . . . . . . . . . . . . . . . .
37
4.3
Type Declarations and Type Aliases
. . . . . . . . . . . . . . . . . . . . .
39
4.4
Type Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
4.5
Variance Annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
4.6
Function Declarations and Definitions
. . . . . . . . . . . . . . . . . . .
44
4.6.1
By-Name Parameters . . . . . . . . . . . . . . . . . . . . . . . . . .
45
4.6.2
Repeated Parameters . . . . . . . . . . . . . . . . . . . . . . . . . .
45
4.6.3
Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
4.6.4
Method Return Type Inference
. . . . . . . . . . . . . . . . . . . .
47
4.7
Import Clauses
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
5
Classes and Objects
49
5.1
Templates
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
5.1.1
Constructor Invocations . . . . . . . . . . . . . . . . . . . . . . . .
51
5.1.2
Class Linearization . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
5.1.3
Class Members
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
5.1.4
Overriding
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
5.1.5
Inheritance Closure
. . . . . . . . . . . . . . . . . . . . . . . . . .
55
5.1.6
Early Definitions
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
CONTENTS
v
5.2
Modifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
5.3
Class Definitions
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
5.3.1
Constructor Definitions
. . . . . . . . . . . . . . . . . . . . . . . .
61
5.3.2
Case Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
5.3.3
Traits
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
5.4
Object Definitions
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
66
6
Expressions
69
6.1
Expression Typing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
70
6.2
Literals
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
70
6.3
The Null Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
6.4
Designators
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
6.5
This and Super
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
72
6.6
Function Applications
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
73
6.7
Method Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
74
6.8
Type Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
75
6.9
Tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
75
6.10 Instance Creation Expressions
. . . . . . . . . . . . . . . . . . . . . . . .
76
6.11 Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
77
6.12 Prefix, Infix, and Postfix Operations
. . . . . . . . . . . . . . . . . . . . .
78
6.12.1 Prefix Operations
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
6.12.2 Postfix Operations
. . . . . . . . . . . . . . . . . . . . . . . . . . .
78
6.12.3 Infix Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
6.12.4 Assignment Operators
. . . . . . . . . . . . . . . . . . . . . . . . .
79
6.13 Typed Expressions
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
80
6.14 Annotated Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
80
6.15 Assignments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
80
6.16 Conditional Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . .
82
6.17 While Loop Expressions
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
82
6.18 Do Loop Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
6.19 For-Comprehensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
6.20 Return Expressions
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
85
6.21 Throw Expressions
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
86
Zgłoś jeśli naruszono regulamin