Functions and classes
In Scala, every value is an object. Functions are first class values, which also makes them objects of their respective classes. The following figure shows the Scala unified type system and how this is achieved. It is adapted from http://www.scala-lang.org/old/sites/default/files/images/classhierarchy.png and represents an up-to-date view of the model (some classes such as ScalaObject
have disappeared, as we have already mentioned before).
As you can see, Scala does not have the same concept of primitive types that Java has and all types are ultimately subtypes of Any
.
Functions as classes
The fact that functions are classes means that they can be freely passed to other methods or classes as if they were just values. This leads to improving the expressiveness of Scala and making it much easier to achieve things, such as callbacks, than in other languages such as Java.
Function literals
Let's have a look at an example:
class FunctionLiterals { val sum = (a: Int,...