【问题标题】:Groovy's classX.metaClass.getProperty in scalascala 中 Groovy 的 classX.metaClass.getProperty
【发布时间】:2012-01-13 18:21:58
【问题描述】:
在 scala 中是否有与 Groovy 非凡的 SomeClass.metaClass.getProperty 函数等效的东西?这对于制作特定领域的语言非常有帮助。例如,我可以说:val x = SomeClass(); x.arbitraryPropertyName 而不是 x.get("arbitraryPropertyName") 或 x("arbitraryPropertyName")。
【问题讨论】:
标签:
scala
groovy
dsl
metaclass
【解决方案1】:
根据您的描述,此功能听起来像 Scala 的Dynamic。来自Scaladoc,
启用动态调用的标记特征。此实例 x
trait 允许为任意方法名称调用 x.meth(args) 和
参数列表 args。如果 x 本身不支持调用,则它是
重写为 x.applyDynamic("meth", args)。
也就是说,如果你的类扩展了Dynamic,那么x.arbitraryPropertyName 形式的调用会被转换为x.applyDynamic("arbitraryPropertyName"),当然你可以定义applyDynamic 的行为。