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完成這一小段代碼時,它就是正常工作。沒有這'簽名'廢話。
...任何意見歡迎:-)
威爾
d'oh!謝謝,現在它是有道理的。 – will