关于groovy的一些用法


最近使用groovy写了一个程序生成器,因为公司原来的生成程序太原始了,直接是JSP调我们自已的业务中间件的,新生成后的程序采用了spring的框架,用到的技术主要是groovy+Template,写的过程中也碰到了一些问题,解决后希望与大家共享.具体关于如何使用groovy以及用groovy进行模板编程,请查看IBM上的实战groovy系列的文章.
1.在模板文件中是不能使用闭包的,使用后可能会造成分析器的混乱.
2.正则表达式用法之大小写.
一般我们使用java时都这么写

Pattern pattern  =  Pattern.compile(
            
" Y\\s*E\\s*C\\s*X\\s* " , Pattern.CASE_INSENSITIVE);

以第二参数来指明不区分大小写,在使用groovy我发现,这招不灵了,因为在groovy中正则表达式是在语言中的
def pattern = ~/(?i)(.*)/这样就得到了一个pattern,如果要指定不区分大小写,与perl,ruby语言有些不同,查jdk官方方档得知,如上代码加(?i)就OK了.
注意:在groovy中可以这样写

def  matcher =   " string "   =~  pattern

此时的pattern为串,而不能是正则表达式.
3.java中的匿名类与groovy中的闭包
生成程序难免要碰到与目录相关的操作程序,一般在java中文件过滤都这么写

String regex  =   " .*查询.*\\.ini " ;
        
final  Pattern pattern2  =  Pattern.compile(regex,Pattern.CASE_INSENSITIVE);    
        
        File path 
=   new  File( " C:\\mydir " );
        String[] list 
=  path.list( new  FilenameFilter()  {
            
public   boolean  accept(File dir, String name)  {
                
return  pattern2.matcher( new  File(name).getName()).matches();
            }

        }
 );

查遍所有groovy文档发现并没有直接使用闭包来完成以上程序,在groovy中用闭包代替内部类的只能用在swing类中那些listener的接口,具体细节查看官方文档.http://groovy.codehaus.org/Groovy+Beans
要用groovy来完成上面的程序有两种方法,第一就是用java完成后,提供给groovy来调用,第二下直接用groovy实现,其实很简单,代码如下:

def  filter( def  filelist){
         
def  col = []
        filelist.each{
            
if (it =~ " .*\\.ini " )
                col
<< it
        }
        
return  col
    }

def  filterfile( def  filedir, def  fileName){
        
def  ffile  =  new File(filedir,fileName)
                
def  fileNames  =  filter(ffile.list())
        
if (( fileName  =~ ' \\d{3} ' ).matches())
            fileName 
=   " I${fileName} "
        createSrc(fileNames,ffile,fileName)
    }

主要由两个函数完成,第一个过滤,第二个匹配.

posted on 2006-09-16 09:38 The One 阅读(1026) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2006年9月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿(3)

随笔档案(11)

相册

我的邮箱

搜索

最新评论

阅读排行榜

评论排行榜