我可以从Groovy调用Scala动态函数吗?

时间:2016-06-15 22:34:37

标签: java scala gradle groovy jvm

我正在Scala中编写Gradle插件。

为了允许我通过Gradle DSL配置插件和相关任务,我需要能够动态调用方法(即实际上不存在的方法)。如果我在Groovy中编写插件,我会使用std::pairmethodMissing,如here所述。

在Scala中,我可以使用dynamic member lookup动态调用函数。这在从Scala代码调用函数时有效,但我似乎找不到从Groovy调用这些动态函数的方法(即当Scala插件用作另一个Gradle项目的一部分时)。

是否可以利用来自Groovy的Scala动态成员查找?或者这是一个死胡同?

1 个答案:

答案 0 :(得分:2)

刚刚想出了我的问题的答案。在Scala中,如果我编写Groovy类并且Scala类扩展methodMissing(Gradle集成需要),我需要实现我实现的相同propertyMissingGroovyObjectSupport函数)。

如果其他人试图做下面类似的事情,那么你需要实现Scala中的函数签名:

class Foo extends GroovyObjectSupport {
  def methodMissing(m: String, arg: Any): Any = ???
  def propertyMissing(p: String): Any = ???
  def propertyMissing(p: String, v: Any): Any = ???
}