Published 2013-03-15.
Time to read: 1 minutes.
Given a map, would it not be nice to have a shorthand way of looking up a value from a key, and to provide a default value? I’ve wanted to be able to do this for a long time. Scala 2.10 makes this really easy!
The MapLookup
class below contains a Map[String, Int]
that can be looked up by using a dollar sign ($) from code that contains a reference
to the implicit class. If the lookup key is not defined by the map, a zero is returned.
implicit class MapLookup(val sc: StringContext) { val map = Map(("a", 1), ("b", 2), ("c", 3)).withDefaultValue(0)
def $(args: Any*): Int = { val orig = sc.s (args : _*) map.get(orig) } }
Assuming that the above is stored in a file called strInterp.scala
,
here are some examples of usage:
$ scala -i strInterp.scala Loading strInterp.scala... defined class MapLookup
Welcome to Scala version 2.10.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_17). Type in expressions to have them evaluated. Type :help for more information.
scala> $"a" res2: Int = 1
scala> $"z" res3: Int = 0
Short and sweet!