關于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)

          相冊

          我的郵箱

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 自治县| 城固县| 陆川县| 弋阳县| 郓城县| 乌兰察布市| 濮阳县| 亳州市| 勐海县| 白城市| 当阳市| 静宁县| 科尔| 通榆县| 宁波市| 永兴县| 余庆县| 贵南县| 美姑县| 贡觉县| 宣恩县| 平陆县| 阳谷县| 咸宁市| 微山县| 南和县| 安塞县| 青田县| 浦城县| 朝阳区| 晴隆县| 开鲁县| 津市市| 五大连池市| 萨嘎县| 尚义县| 铁力市| 恩平市| 达州市| 阆中市| 水城县|