gpt4 book ai didi

parsing - 失败的Eval.me搜索不在其所在类中的字段

转载 作者:行者123 更新时间:2023-12-03 05:11:23 26 4
gpt4 key购买 nike

我试图读取具有解析名称的变量的值:

class GatewayFunctionBuilder{
private String responseClass
.....
String target = 'esponse'
println "writing r${target}Class"
println responseClass
String targetClass = Eval.me("r${target}Class")

结果是:
writing responseClass
MWFtest0A1Response
:application:generateJavaFromTestMwf FAILED

FAILURE: Build failed with an exception.

* Where:
Script 'C:\Users\543829657\workspace\dev.appl.ib.cbl\application\Xml2Java.gradle' line: 53

* What went wrong:
Execution failed for task ':application:generateJavaFromTestMwf'.
> No such property: responseClass for class: Script1

打印的变量的内容正确。但似乎Eval.me不在从其调用的类中而是从Gradle任务脚本中搜索responseClass字段。

如果我将此对象作为参数传递,它将起作用:
String targetClass = Eval.x(this, "x.r${target}Class")

但这没有任何逻辑,因为 this也不是任务脚本的字段,而是仅对于该类的实例才具有正确意义的某种东西。即使该实例是在任务脚本中创建的(作为局部变量),在该实例中仍具有其他名称。

我在Eval文档中没有提到任何内容,它在某些“Script1”的上下文中评估字符串

最佳答案

Groovy 2.4.4中Eval的代码是here。我们观察到以下几点:

class Eval { ...
public static Object me(final String expression) throws CompilationFailedException {
return me(null, null, expression);
}

和:
 public static Object me(final String symbol, final Object object, final String expression) throws CompilationFailedException {
Binding b = new Binding();
b.setVariable(symbol, object);
GroovyShell sh = new GroovyShell(b);
return sh.evaluate(expression);
}

因此,可以在没有Gradle的情况下在纯Groovy中重现该行为:
// Eval.me(expression) == Eval.me(null, null, expression)
def symbol = null
def object = null
def responseClass = "hello"
def target = "esponse"
def expression = "r${target}Class"

def b = new Binding();
b.setVariable(symbol, object);
def sh = new GroovyShell(b);
println sh.evaluate(expression);

很明显,在 expression对象中找不到 Binding

关于parsing - 失败的Eval.me搜索不在其所在类中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45350489/

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