【问题标题】:Can I invoke Scala dynamic functions from Groovy?我可以从 Groovy 调用 Scala 动态函数吗?
【发布时间】:2016-06-15 22:34:36
【问题描述】:
我正在用 Scala 编写 Gradle 插件。
为了允许我通过 Gradle DSL 配置插件和相关任务,我需要能够动态调用方法(即实际上不存在的方法)。如果我在 Groovy 中编写插件,我会使用 methodMissing 或 propertyMissing,如 here 所述。
在 Scala 中,我可以使用 dynamic member lookup 动态调用函数。这在从 Scala 代码调用函数时有效,但我似乎找不到从 Groovy 调用这些动态函数的方法(即,当 Scala 插件用作另一个 Gradle 项目的一部分时)。
是否可以从 Groovy 中利用 Scala 的动态成员查找?或者这是一个死胡同?
【问题讨论】:
标签:
java
scala
gradle
groovy
jvm
【解决方案1】:
刚刚找到我问题的答案。在 Scala 中,我需要实现相同的 methodMissing 和 propertyMissing 函数,如果我正在编写 Groovy 类并让 Scala 类扩展 GroovyObjectSupport(Gradle 集成需要)。
如果其他人试图做类似的事情,下面是您需要实现的 Scala 中的函数签名:
class Foo extends GroovyObjectSupport {
def methodMissing(m: String, arg: Any): Any = ???
def propertyMissing(p: String): Any = ???
def propertyMissing(p: String, v: Any): Any = ???
}