dynamic objects

Run Settings
LanguageScala
Language Version
Run Command
import scala.language.dynamics object Main extends App { class Obj(pairs: Tuple2[String, Any]*) extends Dynamic { var children: Map[String, Any] = Map() pairs.foreach {p => children += (p._1 -> p._2) } def selectDynamic(key: String): Any = { if(children contains key) return ((children get key) get) else return None } def updateDynamic(key: String)(value: Any) = { if(children contains key) children -= key children += (key -> value) } /*def applyDynamic(key: String)(value: Any)(update: String) = { println(key, value, update) }*/ def applyDynamic(key: String)(args: Any*) = { //((children get key) get) val f = ((children get key) get) println(f) } /*def applyDynamic(update: String)(key: String, value: Any) = { //println(update, key, value) if(children contains key) children -= key children += (key -> value) }*/ def apply(): Map[String, Any] = return children def apply(key: String)(args: Any*) = { ((children get key) get)(args:_*) } def apply(key: String): Any = { if(children contains key) return ((children get key) get) else return None } /*def apply(key: String)(a: Any) = { println(key) println(a) }*/ } var obj = new Obj( "a" -> 1, "b" -> 2.3, "c" -> "banana" ) println(obj.a) println(obj.b) println(obj.c) //obj("a") = "mango" /*println(obj("a")) obj.d = List(1, 2, 3) println(obj.d)*/ obj.f = (a: Int, b: Int) => { println(a + b) println(a - b) } obj("f")(1, 2) }
Editor Settings
Theme
Key bindings
Full width
Lines