scala> trait PropertyN { self: Dynamic =>
| def props: Map[String, String]
| def applyDynamic(meth: String)(args: Any*) = props get meth
| }
defined trait PropertyN
Тогда вы можете создать свой класс следующим образом:
scala> class MyClass(val props: Map[String, String]) extends PropertyN with Dynamic
defined class MyClass
У вашего класса теперь есть методы, которые вы хотите:
scala> new MyClass(Map("a" -> "Hello", "b" -> "World"))
res0: MyClass = MyClass@367013
scala> res0.a
dynatype: $line3.$read.$iw.$iw.res0.applyDynamic("a")()
res1: Option[String] = Some(Hello)
Это, конечно, не очень безопасно, но и не ваше. Честно говоря, я думаю, что вам лучше использовать карту напрямую:
res0.properties get "a"
По крайней мере, вы не страдаете какой-либо иллюзией безопасности