我正在Scala中编写Gradle插件。
为了允许我通过Gradle DSL配置插件和相关任务,我需要能够动态调用方法(即实际上不存在的方法)。如果我在Groovy中编写插件,我会使用std::pair
或methodMissing
,如here所述。
在Scala中,我可以使用dynamic member lookup动态调用函数。这在从Scala代码调用函数时有效,但我似乎找不到从Groovy调用这些动态函数的方法(即当Scala插件用作另一个Gradle项目的一部分时)。
是否可以利用来自Groovy的Scala动态成员查找?或者这是一个死胡同?
答案 0 :(得分:2)
刚刚想出了我的问题的答案。在Scala中,如果我编写Groovy类并且Scala类扩展methodMissing
(Gradle集成需要),我需要实现我实现的相同propertyMissing
和GroovyObjectSupport
函数)。
如果其他人试图做下面类似的事情,那么你需要实现Scala中的函数签名:
class Foo extends GroovyObjectSupport {
def methodMissing(m: String, arg: Any): Any = ???
def propertyMissing(p: String): Any = ???
def propertyMissing(p: String, v: Any): Any = ???
}