在scala中是否有与Groovy卓越的SomeClass.metaClass.getProperty函数相同的东西?这对于制作特定于域的语言非常有用。例如,我可以说:val x = SomeClass(); x.arbitraryPropertyName
而不是x.get("arbitraryPropertyName")
或x("arbitraryPropertyName")
。
答案 0 :(得分:9)
根据您的描述,此功能听起来像Scala的Dynamic
。来自Scaladoc,
启用动态调用的标记特征。实例x trait允许调用x.meth(args)来获取任意方法名称meth和 参数列表args。如果x本身不支持调用,则为 改写为x.applyDynamic(“meth”,args)。
也就是说,如果您的课程延伸Dynamic
,则表单x.arbitraryPropertyName
的调用会被转换为x.applyDynamic("arbitraryPropertyName")
,当然您可以定义applyDynamic
的行为