Skip to content

Instantly share code, notes, and snippets.

@bwmcadams
Created January 26, 2011 21:34
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bwmcadams/797513 to your computer and use it in GitHub Desktop.
Save bwmcadams/797513 to your computer and use it in GitHub Desktop.
Quick and dirty version of Map in Scala that can be 'called' like Python dicts where unknown methods are pulled out as Map keys. Uses the 2.9 dynamic trait.
class CallableMap extends scala.collection.mutable.HashMap[String, Any] with Dynamic {
def invokeDynamic(name: String)(args: Any*) = {
println("Invoke Dynamic: (name = %s)(args: %s)".format(name, args))
get(name)
}
def typed[T]: T = {
asInstanceOf[T]
}
}
val data = new CallableMap
data put ("foo", "bar")
data put ("bar", "baz")
data put ("x", "y")
/* scala> data.foo
dynatype: line9$object.$iw.$iw.data.invokeDynamic("foo")()
Invoke Dynamic: (name = foo)(args: List())
res8: Option[Any] = Some(bar)
scala> data.bar
dynatype: line9$object.$iw.$iw.data.invokeDynamic("bar")()
Invoke Dynamic: (name = bar)(args: List())
res9: Option[Any] = Some(baz)
scala> data.baz
dynatype: line9$object.$iw.$iw.data.invokeDynamic("baz")()
Invoke Dynamic: (name = baz)(args: List())
res10: Option[Any] = None */
@yesil
Copy link

yesil commented Feb 21, 2011

Hello, how can i import the Dynamic trait?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment