I tried to stay close to the standard scala behavior. `apply()` throws an exception if the key does not exist, `get()` returns an `Option`, I will add `get()` instead.