String “Groovy方法”;“无签名”;字符串参数和字符串返回

String “Groovy方法”;“无签名”;字符串参数和字符串返回,string,groovy,String,Groovy,我有一个关于使用Groovy的初学者问题。我原以为这是一个简单、不具挑战性的代码片段 def getName( str ){ def rslt = "(none)"; str.eachMatch( /$[TABLE_NAME:[a-zA-Z]]^/ ){ -> patrn if( "(none)" == rslt ){ rslt = patrn; } }//eachMatch r

我有一个关于使用Groovy的初学者问题。我原以为这是一个简单、不具挑战性的代码片段

  def getName( str ){
    def rslt = "(none)";
    str.eachMatch( /$[TABLE_NAME:[a-zA-Z]]^/ ){
        -> patrn

        if( "(none)" == rslt ){
            rslt = patrn;
        }
    }//eachMatch

    return rslt;
}//getName
其思想是从传递的字符串“str”和“rslt”中的匹配字符串返回与regex的第一个匹配项

相反,我有这样的错误

Exception in thread "main" groovy.lang.MissingMethodException: 
    No signature of method: All_Tables$_main_closure1.getName() 
      is applicable for argument types: (org.codehaus.groovy.runtime.GStringImpl) 
        values: [Action]

        Possible solutions: getAt(java.lang.String), getAt(java.lang.String) 
          at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:379)
          at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:909)
          at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:730)
          at ...
          at All_Tables$_main_closure1.doCall(All_Tables.groovy:31)
          at ...
          at groovy.sql.Sql.eachRow(Sql.java:1186)
          at ... 
          at All_Tables.main(All_Tables.groovy:26)
这一呼吁似乎直截了当:

static void main( String args[] ){
    def sql = Sql.newInstance(
            "jdbc:mysql://dev:3306/dbname",
            "dbuser", "dbpass", "com.mysql.jdbc.Driver" );

    sql.eachRow( "SHOW TABLES;" ){
        str = it[0].toString();
        nam = getName( str );
    };

}//main
让我吃惊的是Groovy文档提到了基本Java和Groovy库(如Java.lang.String)。但签名在字符串上失败

我知道这么多。当我用jRuby编写这段小代码时,它就可以正常工作了。这些“签名”都不是废话

。。。欢迎任何意见:-)


Will

很难精确,因为您从问题中省略了很多上下文,但看起来您正试图从静态main方法调用非静态方法


尝试将getName设置为静态,或者在封闭类的实例上调用它

d'oh!谢谢,现在有道理了。