【问题标题】:Groovy no signature of methodGroovy 没有方法的签名
【发布时间】:2022-08-06 08:49:46
【问题描述】:

我正在尝试在Groovy 中创建一个输入字符串并返回修改后的字符串的函数。我认为问题出在插件中,这是我正在使用的特定软件环境,即logic.script.Microblock。我收到的错误消息是:

No signature of method: com.controlj.addonsupport.logic.script.Microblock.capAbbreviate() is applicable for argument types: (java.lang.String) values: [OAT Dewpoint bavo]. 

我试过dispName = capAbbreviate(dispName.toString())dispName = capAbbreviate(dispName)capAbbreviate(dispName)

软件环境正在使用某种插件。我对 Groovy/Java 还很陌生,所以这看起来可能很简单,但它还没有在我的脑海中点击。

下面简化的代码是:

def exceptions = [\'Ac\':\'AC\',\'Oat\':\'OAT\',\'Vav\':\'VAV\']
def exceptionNonAlpha = \'(?=[^a-zA-Z])\'
def dispName

def capAbbreviate(String mbText)
{
    // Iterates through \'exceptions\' map and finds abbreviations and recapitalizes them
    for (hvacName in exceptions.keySet()) {
        mbText = mbText.replaceAll(hvacName + exceptionNonAlpha, exceptions[hvacName])
    }
    return mbText
}

logic.microblocks
{
    dispName = prop.\'display name\'
    dispName = capAbbreviate(dispName.toString()) // also tried capAbbreviate(dispName)
    println dispName
}
  • 您的代码并不正确,不足以重现问题。 1. 在函数内部使用exceptionsexceptionNonAlpha 脚本变量有问题。 2.logic变量如何定义? 3.com.controlj.addonsupport.logic.script.Microblock是什么?是你的班级还是某个图书馆的班级? 4. 上面的代码——它是脚本还是某个类的一部分?考虑到这些要点,您能否更新您的问题?
  • 作为一个半盲的猜测,我可能会说你只是将def capAbbreviate(String mbText) 的定义更改为static def capAbbreviate(String mbText),但我不确定它会有多大帮助。如果您可以使用其他信息更新您的问题,那就太好了。我发现您从闭包中调用的方法的范围有问题。
  • @AndrejIstomin 我更新了原始问题,但 com.controlj.addonsupport.logic.script.Microblock 是我正在使用的软件环境,它会自动加载该插件。我确实尝试添加static def,但返回此错误:org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: Script1.groovy: 158: Apparent variable \'exceptions\' was found in a static scope but doesn\'t refer to a local variable, static field or class.
  • 尝试将exceptions 变量声明为exceptions = [\'Ac\':\'AC\',\'Oat\':\'OAT\',\'Vav\':\'VAV\'] 而不是exceptions = [\'Ac\':\'AC\',\'Oat\':\'OAT\',\'Vav\':\'VAV\']exceptionNonAlpha 相同),它将使这些变量成为全局变量。
  • @AndrejIstomin 我猜你的意思是 **def** exceptions = [\'Ac\':\'AC\',\'Oat\':\'OAT\',\'Vav\':\'VAV\']exceptions = [\'Ac\':\'AC\',\'Oat\':\'OAT\',\'Vav\':\'VAV\']。我正在尝试确定如何使dispName 成为全局,因为这可能是问题的一部分。

标签: function class methods groovy


【解决方案1】:

解决方案有两个部分:

与@AndrejIstomin 提到的类似,删除def 以创建列表或变量全局解决了问题的一部分

解决方案的第二部分是需要使用this. 来调用该方法。即this.capAbbreviate(dispName)

【讨论】:

    猜你喜欢
    • 2017-03-02
    • 2018-12-26
    • 1970-01-01
    • 2021-04-28
    • 2014-10-16
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 2021-12-07
    相关资源
    最近更新 更多