Created
January 26, 2011 21:34
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hello, how can i import the Dynamic trait?