gpt4 book ai didi

Grails 和 Groovy 元编程委托(delegate)

转载 作者:行者123 更新时间:2023-12-02 14:17:41 27 4
gpt4 key购买 nike

我对 groovy 元编程中的委托(delegate)有一些菜鸟问题。

用这行代码

grailsApplication.domainClasses.each { gdc ->
def domClass = gdc.clazz
domClass.metaClass.invokeMethod{name,args ->
//some line of code
def result = invokeMethod(delegate,args)
}
}

这里的委托(delegate)、名称和参数的内容是什么?
一般来说,什么是委托(delegate),它有什么样的内容?

任何帮助和解释将不胜感激

最佳答案

你有一个错字; domClass.metaClass.invokeMethod{name,args ->应该是 domClass.metaClass.invokeMethod = { String name,args -> .这是分配一个闭包作为该类上所有方法调用的处理程序。由于您正在处理方法调用,因此您需要知道方法的名称和方法参数,因此这些是闭包的参数。 args参数将是 Object[]包含来自方法调用的参数的数组。例如 domClass.foo()将有名称“foo”和一个空的 args数组,domClass.foo("purple")将有一个包含字符串“紫色”等的 1 元素数组。

想想delegatethis封闭内。 this实际上是定义闭包的类实例,而不是闭包本身或正在调用该方法的对象。由于您经常需要该对象,delegate指向它。通常,委托(delegate)将是定义闭包的包含实例,因此通过查看那里来解决方法调用,如果没有找到,则抛出丢失的方法异常。但是您可以将委托(delegate)设置为另一个处理程序,该处理程序具有被调用的方法,它将被委托(delegate)给它。这对于 Groovy 构建器和 DSL 尤其有用。

关于Grails 和 Groovy 元编程委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9578133/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com