- •Contents
- •List of Figures
- •List of Tables
- •List of Listings
- •Foreword
- •Foreword to the First Edition
- •Acknowledgments
- •Introduction
- •A Scalable Language
- •A language that grows on you
- •What makes Scala scalable?
- •Why Scala?
- •Conclusion
- •First Steps in Scala
- •Conclusion
- •Next Steps in Scala
- •Conclusion
- •Classes and Objects
- •Semicolon inference
- •Singleton objects
- •A Scala application
- •Conclusion
- •Basic Types and Operations
- •Some basic types
- •Literals
- •Operators are methods
- •Arithmetic operations
- •Relational and logical operations
- •Bitwise operations
- •Object equality
- •Operator precedence and associativity
- •Rich wrappers
- •Conclusion
- •Functional Objects
- •Checking preconditions
- •Self references
- •Auxiliary constructors
- •Method overloading
- •Implicit conversions
- •A word of caution
- •Conclusion
- •Built-in Control Structures
- •If expressions
- •While loops
- •For expressions
- •Match expressions
- •Variable scope
- •Conclusion
- •Functions and Closures
- •Methods
- •Local functions
- •Short forms of function literals
- •Placeholder syntax
- •Partially applied functions
- •Closures
- •Special function call forms
- •Tail recursion
- •Conclusion
- •Control Abstraction
- •Reducing code duplication
- •Simplifying client code
- •Currying
- •Writing new control structures
- •Conclusion
- •Composition and Inheritance
- •A two-dimensional layout library
- •Abstract classes
- •Extending classes
- •Invoking superclass constructors
- •Polymorphism and dynamic binding
- •Using composition and inheritance
- •Heighten and widen
- •Putting it all together
- •Conclusion
- •How primitives are implemented
- •Bottom types
- •Conclusion
- •Traits
- •How traits work
- •Thin versus rich interfaces
- •Example: Rectangular objects
- •The Ordered trait
- •Why not multiple inheritance?
- •To trait, or not to trait?
- •Conclusion
- •Packages and Imports
- •Putting code in packages
- •Concise access to related code
- •Imports
- •Implicit imports
- •Package objects
- •Conclusion
- •Assertions and Unit Testing
- •Assertions
- •Unit testing in Scala
- •Informative failure reports
- •Using JUnit and TestNG
- •Property-based testing
- •Organizing and running tests
- •Conclusion
- •Case Classes and Pattern Matching
- •A simple example
- •Kinds of patterns
- •Pattern guards
- •Pattern overlaps
- •Sealed classes
- •The Option type
- •Patterns everywhere
- •A larger example
- •Conclusion
- •Working with Lists
- •List literals
- •The List type
- •Constructing lists
- •Basic operations on lists
- •List patterns
- •First-order methods on class List
- •Methods of the List object
- •Processing multiple lists together
- •Conclusion
- •Collections
- •Sequences
- •Sets and maps
- •Selecting mutable versus immutable collections
- •Initializing collections
- •Tuples
- •Conclusion
- •Stateful Objects
- •What makes an object stateful?
- •Reassignable variables and properties
- •Case study: Discrete event simulation
- •A language for digital circuits
- •The Simulation API
- •Circuit Simulation
- •Conclusion
- •Type Parameterization
- •Functional queues
- •Information hiding
- •Variance annotations
- •Checking variance annotations
- •Lower bounds
- •Contravariance
- •Object private data
- •Upper bounds
- •Conclusion
- •Abstract Members
- •A quick tour of abstract members
- •Type members
- •Abstract vals
- •Abstract vars
- •Initializing abstract vals
- •Abstract types
- •Path-dependent types
- •Structural subtyping
- •Enumerations
- •Case study: Currencies
- •Conclusion
- •Implicit Conversions and Parameters
- •Implicit conversions
- •Rules for implicits
- •Implicit conversion to an expected type
- •Converting the receiver
- •Implicit parameters
- •View bounds
- •When multiple conversions apply
- •Debugging implicits
- •Conclusion
- •Implementing Lists
- •The List class in principle
- •The ListBuffer class
- •The List class in practice
- •Functional on the outside
- •Conclusion
- •For Expressions Revisited
- •For expressions
- •The n-queens problem
- •Querying with for expressions
- •Translation of for expressions
- •Going the other way
- •Conclusion
- •The Scala Collections API
- •Mutable and immutable collections
- •Collections consistency
- •Trait Traversable
- •Trait Iterable
- •Sets
- •Maps
- •Synchronized sets and maps
- •Concrete immutable collection classes
- •Concrete mutable collection classes
- •Arrays
- •Strings
- •Performance characteristics
- •Equality
- •Views
- •Iterators
- •Creating collections from scratch
- •Conversions between Java and Scala collections
- •Migrating from Scala 2.7
- •Conclusion
- •The Architecture of Scala Collections
- •Builders
- •Factoring out common operations
- •Integrating new collections
- •Conclusion
- •Extractors
- •An example: extracting email addresses
- •Extractors
- •Patterns with zero or one variables
- •Variable argument extractors
- •Extractors and sequence patterns
- •Extractors versus case classes
- •Regular expressions
- •Conclusion
- •Annotations
- •Why have annotations?
- •Syntax of annotations
- •Standard annotations
- •Conclusion
- •Working with XML
- •Semi-structured data
- •XML overview
- •XML literals
- •Serialization
- •Taking XML apart
- •Deserialization
- •Loading and saving
- •Pattern matching on XML
- •Conclusion
- •Modular Programming Using Objects
- •The problem
- •A recipe application
- •Abstraction
- •Splitting modules into traits
- •Runtime linking
- •Tracking module instances
- •Conclusion
- •Object Equality
- •Equality in Scala
- •Writing an equality method
- •Recipes for equals and hashCode
- •Conclusion
- •Combining Scala and Java
- •Using Scala from Java
- •Annotations
- •Existential types
- •Using synchronized
- •Compiling Scala and Java together
- •Conclusion
- •Actors and Concurrency
- •Trouble in paradise
- •Actors and message passing
- •Treating native threads as actors
- •Better performance through thread reuse
- •Good actors style
- •A longer example: Parallel discrete event simulation
- •Conclusion
- •Combinator Parsing
- •Example: Arithmetic expressions
- •Running your parser
- •Basic regular expression parsers
- •Another example: JSON
- •Parser output
- •Implementing combinator parsers
- •String literals and regular expressions
- •Lexing and parsing
- •Error reporting
- •Backtracking versus LL(1)
- •Conclusion
- •GUI Programming
- •Panels and layouts
- •Handling events
- •Example: Celsius/Fahrenheit converter
- •Conclusion
- •The SCells Spreadsheet
- •The visual framework
- •Disconnecting data entry and display
- •Formulas
- •Parsing formulas
- •Evaluation
- •Operation libraries
- •Change propagation
- •Conclusion
- •Scala Scripts on Unix and Windows
- •Glossary
- •Bibliography
- •About the Authors
- •Index
List of Listings
3.1 |
Parameterizing an array with a type. . . . . . . . . . . . . |
82 |
3.2 |
Creating and initializing an array. . . . . . . . . . . . . . . |
85 |
3.3 |
Creating and initializing a list. . . . . . . . . . . . . . . . . |
86 |
3.4 |
Creating and using a tuple. . . . . . . . . . . . . . . . . . |
90 |
3.5 |
Creating, initializing, and using an immutable set. . . . . . |
91 |
3.6 |
Creating, initializing, and using a mutable set. . . . . . . . |
93 |
3.7 |
Creating, initializing, and using a mutable map. . . . . . . |
94 |
3.8 |
Creating, initializing, and using an immutable map. . . . . |
95 |
3.9 |
A function without side effects or vars. . . . . . . . . . . . |
97 |
3.10 |
Reading lines from a file. . . . . . . . . . . . . . . . . . . |
99 |
3.11 |
Printing formatted character counts for the lines of a file. . |
102 |
4.1 |
Final version of class ChecksumAccumulator. . . . . . . . |
107 |
4.2 |
Companion object for class ChecksumAccumulator. . . . . |
110 |
4.3 |
The Summer application. . . . . . . . . . . . . . . . . . . . |
112 |
4.4 |
Using the Application trait. . . . . . . . . . . . . . . . . |
115 |
6.1 |
Rational with fields. . . . . . . . . . . . . . . . . . . . . |
145 |
6.2 |
Rational with an auxiliary constructor. . . . . . . . . . . |
147 |
6.3 |
Rational with a private field and method. . . . . . . . . . |
148 |
6.4 |
Rational with operator methods. . . . . . . . . . . . . . . |
150 |
6.5 |
Rational with overloaded methods. . . . . . . . . . . . . |
155 |
7.1 |
Scala’s idiom for conditional initialization. . . . . . . . . . |
160 |
7.2 |
Calculating greatest common divisor with a while loop. . . |
161 |
7.3 |
Reading from the standard input with do-while. . . . . . . |
162 |
7.4 |
Calculating greatest common divisor with recursion. . . . . |
163 |
7.5 |
Listing files in a directory with a for expression. . . . . . . |
164 |
xxvi
|
List of Listings |
xxvii |
7.6 |
Finding .scala files using a for with a filter. . . . . . . . |
166 |
7.7 |
Using multiple filters in a for expression. . . . . . . . . . |
166 |
7.8 |
Using multiple generators in a for expression. . . . . . . . |
167 |
7.9 |
Mid-stream assignment in a for expression. . . . . . . . . |
168 |
7.10 |
Transforming an Array[File] to Array[Int] with a for. |
169 |
7.11 |
A try-catch clause in Scala. . . . . . . . . . . . . . . . . |
171 |
7.12 |
A try-finally clause in Scala. . . . . . . . . . . . . . . |
172 |
7.13 |
A catch clause that yields a value. . . . . . . . . . . . . . |
173 |
7.14 |
A match expression with side effects. . . . . . . . . . . . . |
174 |
7.15 |
A match expression that yields a value. . . . . . . . . . . . |
174 |
7.16 |
Looping without break or continue. . . . . . . . . . . . . |
176 |
7.17 |
A recursive alternative to looping with vars. . . . . . . . . |
176 |
7.18 |
Variable scoping when printing a multiplication table. . . . |
179 |
7.19 |
A functional way to create a multiplication table. . . . . . . |
182 |
8.1 |
LongLines with a private processLine method. . . . . . . |
185 |
8.2 |
LongLines with a local processLine function. . . . . . . |
187 |
8.3 |
A parameter with a default value. . . . . . . . . . . . . . . |
201 |
8.4 |
A function with two parameters that have defaults. . . . . . |
202 |
9.1 |
Using closures to reduce code duplication. . . . . . . . . . |
211 |
9.2 |
Defining and invoking a “plain old” function. . . . . . . . . |
214 |
9.3 |
Defining and invoking a curried function. . . . . . . . . . . |
214 |
9.4 |
Using the loan pattern to write to a file. . . . . . . . . . . . |
218 |
9.5 |
Using a by-name parameter. . . . . . . . . . . . . . . . . . |
219 |
10.1 |
Defining an abstract method and class. . . . . . . . . . . . |
224 |
10.2 |
Defining parameterless methods width and height. . . . . |
225 |
10.3 |
Defining ArrayElement as a subclass of Element. . . . . . |
227 |
10.4 |
Overriding a parameterless method with a field. . . . . . . |
229 |
10.5 |
Defining contents as a parametric field. . . . . . . . . . . |
231 |
10.6 |
Invoking a superclass constructor. . . . . . . . . . . . . . . |
232 |
10.7 |
Declaring a final method. . . . . . . . . . . . . . . . . . . |
238 |
10.8 |
Declaring a final class. . . . . . . . . . . . . . . . . . . . . |
238 |
10.9 |
Class Element with above, beside, and toString. . . . . |
243 |
10.10 |
A factory object with factory methods. . . . . . . . . . . . |
244 |
10.11 |
Class Element refactored to use factory methods. . . . . . |
245 |
10.12 |
Hiding implementation with private classes. . . . . . . . . |
246 |
Cover · Overview · Contents · Discuss · Suggest · Glossary · Index
|
List of Listings |
xxviii |
10.13 |
Element with widen and heighten methods. . . . . . . . |
247 |
10.14 |
The Spiral application. . . . . . . . . . . . . . . . . . . . |
248 |
12.1 |
The definition of trait Philosophical. . . . . . . . . . . . |
258 |
12.2 |
Mixing in a trait using extends. . . . . . . . . . . . . . . |
259 |
12.3 |
Mixing in a trait using with. . . . . . . . . . . . . . . . . |
260 |
12.4 |
Mixing in multiple traits. . . . . . . . . . . . . . . . . . . |
260 |
12.5 |
Defining an enrichment trait. . . . . . . . . . . . . . . . . |
264 |
12.6 |
Abstract class IntQueue. . . . . . . . . . . . . . . . . . . |
268 |
12.7 |
A BasicIntQueue implemented with an ArrayBuffer. . . |
268 |
12.8 |
The Doubling stackable modification trait. . . . . . . . . . |
269 |
12.9 |
Mixing in a trait when instantiating with new. . . . . . . . . |
270 |
12.10 |
Stackable modification traits Incrementing and Filtering. |
270 |
13.1 |
Placing the contents of an entire file into a package. . . . . |
278 |
13.2 |
Long form of a simple package declaration. . . . . . . . . |
278 |
13.3 |
Multiple packages in the same file. . . . . . . . . . . . . . |
279 |
13.4 |
Concise access to classes and packages. . . . . . . . . . . . |
279 |
13.5 |
Symbols in enclosing packages not automatically available. |
280 |
13.6 |
Accessing hidden package names. . . . . . . . . . . . . . . |
280 |
13.7 |
Bob’s delightful fruits, ready for import. . . . . . . . . . . |
283 |
13.8 |
Importing the members of a regular (not singleton) object. . |
283 |
13.9 |
Importing a package name. . . . . . . . . . . . . . . . . . |
284 |
13.10 |
How private access differs in Scala and Java. . . . . . . . . |
287 |
13.11 |
How protected access differs in Scala and Java. . . . . . . . |
288 |
13.12 |
Flexible scope of protection with access qualifiers. . . . . . |
289 |
13.13 |
Accessing private members of companion classes and objects. |
292 |
13.14 |
A package object. . . . . . . . . . . . . . . . . . . . . . . |
293 |
14.1 |
Using an assertion. . . . . . . . . . . . . . . . . . . . . . . |
296 |
14.2 |
Using ensuring to assert a function’s result. . . . . . . . . |
296 |
14.3 |
Writing a test method with Suite. . . . . . . . . . . . . . |
297 |
14.4 |
Writing a test function with FunSuite. . . . . . . . . . . . |
298 |
14.5 |
Writing a JUnit test with JUnit3Suite. . . . . . . . . . . |
301 |
14.6 |
Writing a TestNG test with TestNGSuite. . . . . . . . . . |
302 |
14.7 |
Specifying and testing behavior with a ScalaTest FlatSpec. |
303 |
14.8 |
Specifying and testing behavior with the specs framework. . |
304 |
14.9 |
Writing property-based tests with ScalaCheck. . . . . . . . |
305 |
Cover · Overview · Contents · Discuss · Suggest · Glossary · Index
|
List of Listings |
xxix |
15.1 |
Defining case classes. . . . . . . . . . . . . . . . . . . . . |
310 |
15.2 |
The simplifyTop function, which does a pattern match. . . |
312 |
15.3 |
A pattern match with an empty “default” case. . . . . . . . |
314 |
15.4 |
A pattern match with wildcard patterns. . . . . . . . . . . . |
315 |
15.5 |
A pattern match with constant patterns. . . . . . . . . . . . |
315 |
15.6 |
A pattern match with a variable pattern. . . . . . . . . . . . |
316 |
15.7 |
A pattern match with a constructor pattern. . . . . . . . . . |
318 |
15.8 |
A sequence pattern with a fixed length. . . . . . . . . . . . |
318 |
15.9 |
A sequence pattern with an arbitrary length. . . . . . . . . |
319 |
15.10 |
A pattern match with a tuple pattern. . . . . . . . . . . . . |
319 |
15.11 |
A pattern match with typed patterns. . . . . . . . . . . . . |
320 |
15.12 |
Using isInstanceOf and asInstanceOf (poor style). . . . |
321 |
15.13 |
A pattern with a variable binding (via the @ sign). . . . . . |
323 |
15.14 |
A match expression with a pattern guard. . . . . . . . . . . |
324 |
15.15 |
Match expression in which case order matters. . . . . . . . |
325 |
15.16 |
A sealed hierarchy of case classes. . . . . . . . . . . . . . |
327 |
15.17 |
Defining multiple variables with one assignment. . . . . . . |
330 |
15.18 |
A for expression with a tuple pattern. . . . . . . . . . . . |
334 |
15.19 |
Picking elements of a list that match a pattern. . . . . . . . |
334 |
15.20 |
The top half of the expression formatter. . . . . . . . . . . |
337 |
15.21 |
The bottom half of the expression formatter. . . . . . . . . |
338 |
15.22 |
An application that prints formatted expressions. . . . . . . |
341 |
16.1 |
A merge sort function for Lists. . . . . . . . . . . . . . . |
360 |
17.1 |
Default map and set definitions in Predef. . . . . . . . . . |
382 |
18.1 |
A mutable bank account class. . . . . . . . . . . . . . . . . |
400 |
18.2 |
A class with public vars. . . . . . . . . . . . . . . . . . . |
402 |
18.3 |
How public vars are expanded into getter and setter methods. |
403 |
18.4 |
Defining getter and setter methods directly. . . . . . . . . . |
403 |
18.5 |
Defining a getter and setter without an associated field. . . |
404 |
18.6 |
The halfAdder method. . . . . . . . . . . . . . . . . . . . |
407 |
18.7 |
The fullAdder method. . . . . . . . . . . . . . . . . . . . |
408 |
18.8 |
The Simulation class. . . . . . . . . . . . . . . . . . . . |
410 |
18.9 |
The first half of the BasicCircuitSimulation class. . . . |
414 |
18.10 |
The second half of the BasicCircuitSimulation class. . |
415 |
18.11 |
The CircuitSimulation class. . . . . . . . . . . . . . . . |
419 |
Cover · Overview · Contents · Discuss · Suggest · Glossary · Index
|
List of Listings |
xxx |
19.1 |
A basic functional queue. . . . . . . . . . . . . . . . . . . |
425 |
19.2 |
Hiding a primary constructor by making it private. . . . . . |
426 |
19.3 |
An apply factory method in a companion object. . . . . . . |
427 |
19.4 |
Type abstraction for functional queues. . . . . . . . . . . . |
428 |
19.5 |
A nonvariant (rigid) Cell class. . . . . . . . . . . . . . . . |
431 |
19.6 |
A type parameter with a lower bound. . . . . . . . . . . . . |
437 |
19.7 |
A contravariant output channel. . . . . . . . . . . . . . . . |
438 |
19.8 |
Covariance and contravariance of Function1s. . . . . . . . |
439 |
19.9 |
Demonstration of function type parameter variance. . . . . |
440 |
19.10 |
An optimized functional queue. . . . . . . . . . . . . . . . |
442 |
19.11 |
A Person class that mixes in the Ordered trait. . . . . . . |
444 |
19.12 |
A merge sort function with an upper bound. . . . . . . . . |
444 |
20.1 |
Overriding abstract vals and parameterless methods. . . . |
450 |
20.2 |
Declaring abstract vars. . . . . . . . . . . . . . . . . . . . |
450 |
20.3 |
How abstract vars are expanded into getters and setters. . . |
451 |
20.4 |
A trait that uses its abstract vals. . . . . . . . . . . . . . . |
452 |
20.5 |
Pre-initialized fields in an anonymous class expression. . . |
454 |
20.6 |
Pre-initialized fields in an object definition. . . . . . . . . . |
454 |
20.7 |
Pre-initialized fields in a class definition. . . . . . . . . . . |
455 |
20.8 |
Initializing a trait with lazy vals. . . . . . . . . . . . . . . |
456 |
20.9 |
Modeling suitable food with an abstract type. . . . . . . . . |
460 |
20.10 |
Implementing an abstract type in a subclass. . . . . . . . . |
461 |
20.11 |
The US currency zone. . . . . . . . . . . . . . . . . . . . . |
473 |
20.12 |
Currency zones for Europe and Japan. . . . . . . . . . . . |
475 |
20.13 |
A converter object with an exchange rates map. . . . . . . |
476 |
20.14 |
The full code of class CurrencyZone. . . . . . . . . . . . |
477 |
21.1 |
An implicit parameter list with multiple parameters. . . . . |
491 |
21.2 |
A function with an upper bound. . . . . . . . . . . . . . . |
493 |
21.3 |
A function with an implicit parameter. . . . . . . . . . . . |
494 |
21.4 |
A function that uses an implicit parameter internally. . . . . |
496 |
21.5 |
A function with a view bound. . . . . . . . . . . . . . . . . |
497 |
21.6 |
Sample code that uses an implicit parameter. . . . . . . . . |
500 |
21.7 |
Sample code after type checking and insertion of implicits. |
500 |
22.1 |
The definition of the Nil singleton object. . . . . . . . . . |
505 |
22.2 |
Prepending a supertype element to a subtype list. . . . . . . |
507 |
Cover · Overview · Contents · Discuss · Suggest · Glossary · Index
|
List of Listings |
xxxi |
22.3 |
The definition of method :: (cons) in class List. . . . . . |
507 |
22.4 |
The definition of method ::: in class List. . . . . . . . . |
509 |
22.5 |
The definition of method map in class List. . . . . . . . . |
511 |
22.6 |
The definition of the :: subclass of List. . . . . . . . . . |
512 |
24.1 |
Mixing in the SynchronizedMap trait. . . . . . . . . . . . |
563 |
25.1 |
An outline of the Builder class. . . . . . . . . . . . . . . |
608 |
25.2 |
Implementation of filter in TraversableLike. . . . . . |
609 |
25.3 |
Implementation of map in TraversableLike. . . . . . . . |
612 |
25.4 |
The CanBuildFrom trait. . . . . . . . . . . . . . . . . . . |
612 |
25.5 |
RNA Bases. . . . . . . . . . . . . . . . . . . . . . . . . . |
614 |
25.6 |
RNA strands class, first version. . . . . . . . . . . . . . . . |
615 |
25.7 |
RNA strands class, second version. . . . . . . . . . . . . . |
618 |
25.8 |
RNA strands class, final version. . . . . . . . . . . . . . . |
622 |
25.9 |
RNA companion object—final version. . . . . . . . . . . . |
623 |
25.10 |
An implementation of prefix maps with Patricia tries. . . . |
626 |
25.11 |
The companion object for prefix maps. . . . . . . . . . . . |
629 |
26.1 |
The EMail string extractor object. . . . . . . . . . . . . . . |
633 |
26.2 |
The Twice string extractor object. . . . . . . . . . . . . . . |
636 |
26.3 |
The UpperCase string extractor object. . . . . . . . . . . . |
636 |
26.4 |
The Domain string extractor object. . . . . . . . . . . . . . |
638 |
26.5 |
The ExpandedEMail extractor object. . . . . . . . . . . . . |
639 |
26.6 |
An extractor that defines an unapplySeq method. . . . . . |
640 |
26.7 |
How the r method is defined in StringOps. . . . . . . . . |
644 |
29.1 |
A simple Food entity class. . . . . . . . . . . . . . . . . . |
671 |
29.2 |
Simple Recipe entity class. . . . . . . . . . . . . . . . . . |
672 |
29.3 |
Food and Recipe examples for use in tests. . . . . . . . . . |
672 |
29.4 |
Mock database and browser modules. . . . . . . . . . . . . |
673 |
29.5 |
Database and browser modules with categories added. . . . |
674 |
29.6 |
A Browser class with an abstract database val. . . . . . . |
675 |
29.7 |
A Database class with abstract methods. . . . . . . . . . . |
676 |
29.8 |
The SimpleDatabase object as a Database subclass. . . . |
676 |
29.9 |
The SimpleBrowser object as a Browser subclass. . . . . |
677 |
29.10 |
A student database and browser. . . . . . . . . . . . . . . . |
677 |
29.11 |
A trait for food categories. . . . . . . . . . . . . . . . . . . |
678 |
29.12 |
A Database class that mixes in the FoodCategories trait. |
678 |
Cover · Overview · Contents · Discuss · Suggest · Glossary · Index
|
List of Listings |
xxxii |
29.13 |
A SimpleDatabase object composed solely of mixins. . . |
678 |
29.14 |
A SimpleFoods trait. . . . . . . . . . . . . . . . . . . . . |
678 |
29.15 |
A SimpleRecipes trait with a self type. . . . . . . . . . . |
679 |
29.16 |
An app that dynamically selects a module implementation. |
680 |
29.17 |
Using a singleton type. . . . . . . . . . . . . . . . . . . . |
682 |
30.1 |
A superclass equals method that calls canEqual. . . . . . |
696 |
30.2 |
A subclass equals method that calls canEqual. . . . . . . |
697 |
30.3 |
Hierarchy for binary trees. . . . . . . . . . . . . . . . . . . |
699 |
30.4 |
A parameterized type with equals and hashCode. . . . . . |
703 |
30.5 |
Class Rational with equals and hashCode. . . . . . . . . |
704 |
31.1 |
A Scala method that declares a Java throws clause. . . . . |
715 |
32.1 |
A simple actor. . . . . . . . . . . . . . . . . . . . . . . . . |
726 |
32.2 |
An actor that calls receive. . . . . . . . . . . . . . . . . . |
728 |
32.3 |
An actor that calls react. . . . . . . . . . . . . . . . . . . |
732 |
32.4 |
An actor’s act method that uses loop. . . . . . . . . . . . |
733 |
32.5 |
An actor that uses a helper actor to avoid blocking itself. . . |
735 |
32.6 |
An actor that uses case classes for messages. . . . . . . . . |
740 |
32.7 |
The Simulant trait. . . . . . . . . . . . . . . . . . . . . . |
748 |
32.8 |
Adder components. . . . . . . . . . . . . . . . . . . . . . |
755 |
33.1 |
An arithmetic expression parser. . . . . . . . . . . . . . . . |
761 |
33.2 |
A regular expression parser for Java identifiers. . . . . . . . |
763 |
33.3 |
Data in JSON format. . . . . . . . . . . . . . . . . . . . . |
765 |
33.4 |
A simple JSON parser. . . . . . . . . . . . . . . . . . . . . |
766 |
33.5 |
A full JSON parser that returns meaningful results. . . . . . |
770 |
33.6 |
The ~ combinator method. . . . . . . . . . . . . . . . . . . |
778 |
34.1 |
A simple Swing application in Scala. . . . . . . . . . . . . |
789 |
34.2 |
Component assembly on a panel. . . . . . . . . . . . . . . |
791 |
34.3 |
Implementing a reactive Swing application. . . . . . . . . . |
795 |
34.4 |
An implementation of the temperature converter. . . . . . . |
797 |
35.1 |
Code for spreadsheet in Figure 35.1. . . . . . . . . . . . . |
802 |
35.2 |
The main program for the spreadsheet application. . . . . . |
803 |
35.3 |
A spreadsheet with a rendererComponent method. . . . . |
804 |
35.4 |
First version of the Model class. . . . . . . . . . . . . . . . |
805 |
Cover · Overview · Contents · Discuss · Suggest · Glossary · Index
|
List of Listings |
xxxiii |
35.5 |
Classes representing formulas. . . . . . . . . . . . . . . . |
807 |
35.6 |
A spreadsheet that parses formulas. . . . . . . . . . . . . . |
811 |
35.7 |
The evaluate method of trait Evaluator. . . . . . . . . . |
814 |
35.8 |
A library for arithmetic operations. . . . . . . . . . . . . . |
816 |
35.9 |
The finished spreadsheet component. . . . . . . . . . . . . |
822 |
Cover · Overview · Contents · Discuss · Suggest · Glossary · Index