我有一个关于使用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执行这一小段代码时,就可以了。没有这个'签名'废话。
......欢迎任何建议: - )
威尔
答案 0 :(得分:2)
很难准确,因为你从问题中省略了很多上下文,但看起来你试图从静态main方法调用非静态方法。
尝试将getName设为静态,或者在封闭类的实例上调用它