簡體   English   中英

Groovy方法“無簽名”字符串參數和字符串返回

[英]Groovy method “no signature” String argument and String return

我有一個關於使用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)。 然而簽名在String上失敗了。

我知道的很多。 當我使用jRuby執行這一小段代碼時,就可以了。 沒有這個“ 簽名 ”的廢話。

...歡迎任何建議:-)

很難准確,因為你從問題中省略了很多上下文,但看起來你試圖從靜態main方法中調用非靜態方法。

嘗試將getName設為靜態,或者在封閉類的實例上調用它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM