Another Tour of Scala


The Gist

Unified Types is an overview of Scala’s types and classes at a very high level.

My Interpretation

All Scala values are objects; there is no formal “primitive” type as there is in Java. However, there is a distinction in the main object tree.

Every object is a subtype of Any, however in practice, most objects will be a direct subtype of AnyRef. AnyVal is a superclass for the types that, in Java, are considered “primitive” (that being things like int, byte, and float). Further, all classes implicitly extend scala.ScalaObject (which is a trait) and AnyRef (yes, there is multiple inheritance). Finally, classes you can access from the Java runtime do not extend scala.ScalaObject , but just extend AnyRef.

My Thoughts on this Feature

Thank GOD we don’t need Java’s stupid primitive types any more (even though they are actually still there, since this is the JVM and all). However, I find the concepts of Null, Nothing, and null less than intuitive. Stuff like this just makes me scratch my head. Especially Nil being the empty list. What’s so wrong with EmptyList?