需要帮助了解 Groovy 中的 Callsite 数组

Need help understanding Callsite arrays in Groovy

我在查看应用程序时遇到了这段代码。

groovy.util.ConfigObject config = (groovy.util.ConfigObject)org.codehaus.groovy.runtime.ScriptBytecodeAdapter.castToType(arrayOfCallSite[438].callGetProperty(this.grailsApplication), groovy.util.ConfigObject.class);

我的问题是,调用点数组是做什么的,它是如何初始化以包含稍后要检索的数据的?(在本例中是配置)我尝试阅读 groovy 的文档,但是那里根本没有任何有用的描述来解释它的作用,文档中只显示了一个方法和属性列表。

它看起来像反编译的 groovy 代码或从 groovy 生成的 java 代码。

让我们看看简单的 groovy 脚本:

cfg = new ConfigObject()
ConfigObject c = cfg

将脚本变量 cfg 值赋值到 java 中定义的 c 变量的本地类型的行将如下所示:

ScriptBytecodeAdapter.setGroovyObjectProperty(localObject, Script61235.class, this, (String)"cfg");
ConfigObject c = (ConfigObject)ScriptBytecodeAdapter
    .castToType(arrayOfCallSite[2].callGroovyObjectGetProperty(this), ConfigObject.class)

因此,您的代码大致对应于此 groovy 代码:

ConfigObject config = this.grailsApplication.xxx

xxx 我们在您的问题中没有看到。

最好找到原始 groovy 代码,你会更好地理解它)