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)
}