I am trying to implement a C # ExpandoObject in Scala. Here's how it should work:
val e = new ExpandoObject e.name := "Rahul"
Here is what I have tried so far:
implicit def enrichAny[A](underlying: A) = new EnrichedAny(underlying) class EnrichedAny[A](underlying: A) { // ... def dyn = new Dyn(underlying.asInstanceOf[AnyRef]) } class Dyn(x: AnyRef) extends Dynamic { def applyDynamic(message: String)(args: Any*) = { new Dyn(x.getClass.getMethod(message, args.map(_.asInstanceOf[AnyRef].getClass) : _*). invoke(x, args.map(_.asInstanceOf[AnyRef]) : _*)) } def typed[A] = x.asInstanceOf[A] override def toString = "Dynamic(" + x + ")" } class ExpandoObject extends Dynamic { private val fields = mutable.Map.empty[String, Dyn] def applyDynamic(message: String)(args: Any*): Dynamic = { fields get message match { case Some(v) => v case None => new Assigner(fields, message).dyn } } } class Assigner(fields: mutable.Map[String, Dyn], message: String) { def :=(value: Any): Unit = { fields += (message -> value.dyn) } }
When I try to compile this code, I get a StackOverflowError . Please help me get this job. :) Thank you.
missingfaktor
source share