2013-05-19 35 views
0

我有一個關於使用Groovy的初學者問題。我曾認爲這是一個簡單,不具有挑戰性的代碼片段。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」匹配字符串正則表達式。

相反,我有這種錯誤。

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)也包括在內。但是String上的簽名失敗。

我知道這一點。當我用jRuby完成這一小段代碼時,它就是正常工作。沒有這'簽名'廢話。

...任何意見歡迎:-)

威爾

回答

2

很難,你從你的問題忽略了很多方面的確切,但它看起來像你試圖調用一個非靜態主要方法。

嘗試使getName爲靜態,或將其稱爲您的封閉類的實例

+0

d'oh!謝謝,現在它是有道理的。 – will