【问题标题】:Defining a Method inside Groovy used in Java在 Java 中使用的 Groovy 中定义一个方法
【发布时间】:2017-11-05 10:15:14
【问题描述】:

我在 Java class 中使用 Groovy Interpreter,我正在尝试定义一个方法并调用它,这是我的代码:

        Binding binding = new Binding();
        binding.setVariable("aa", 1);
        binding.setVariable("bb", 2);

        GroovyShell shell = new GroovyShell(binding);
        shell.evaluate("int add(int a,int b){return (a+b)}");

        int   value =(int) shell.evaluate("add(aa,bb);");
        System.out.println(value);

我遇到了这个错误:

线程“主”groovy.lang.MissingMethodException 中的异常:否 方法签名:Script2.add() 适用于参数类型: (java.lang.Integer, java.lang.Integer) 值:[1, 2] 可能 解决方案:any()、wait()、run()、run()、find()、wait(long, int)

请告诉我如何在 groovy 中定义一个函数以及为什么我的代码不起作用。

最好的问候,

【问题讨论】:

  • 如果将所有 Groovy 代码粘贴到一个字符串中并计算一次,会发生什么情况?基于类名Script2,我认为shell独立处理每个evaluate调用。
  • @chrylis 你说得对,当我在一个shell 评估中评估所有脚本时,这有效,谢谢

标签: java methods groovy


【解决方案1】:

当您使用GroovyShell#evaluate 时,shell 会将整个脚本编译成一个 JVM 类,加载并运行它,然后返回结果。这个过程对于每个evaluate 调用都是独立的(请注意,类的名称是Script2;该方法在Script1 中定义),因此您的方法在第二次调用中不可用。

解决此问题的选项包括在评估之前进行简单的字符串连接(这适用于您自己的脚本,但如果脚本中的某些内容调用return,则可能会出现问题)或使用更复杂的GroovyScriptEngine

【讨论】:

  • 谢谢你这是问题,你的回答也有帮助
猜你喜欢
  • 2014-11-26
  • 1970-01-01
  • 2011-01-26
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
相关资源
最近更新 更多