關于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 閱讀(1041) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2006年9月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          導航

          統計

          常用鏈接

          留言簿(3)

          隨筆檔案(11)

          相冊

          我的郵箱

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 汉川市| 哈巴河县| 宝鸡市| 湖南省| 云梦县| 通榆县| 旬阳县| 齐河县| 德保县| 闸北区| 衢州市| 枣阳市| 永州市| 西盟| 泰来县| 任丘市| 厦门市| 枣阳市| 安福县| 文水县| 齐齐哈尔市| 黔江区| 兴宁市| 建瓯市| 阿勒泰市| 南充市| 濉溪县| 轮台县| 无棣县| 富裕县| 兴业县| 东阳市| 平江县| 轮台县| 故城县| 邳州市| 濮阳市| 甘孜县| 都江堰市| 旬邑县| 晋中市|