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 など) が含まれていることが記載されていることです。それでも、署名は文字列で失敗します。
私はこれをよく知っています。jRuby でこの小さなコードを実行すると、うまくいきます。この「署名」のナンセンスはありません。
...どんなアドバイスも歓迎します:-)
意思