<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Groovy入門篇--Code as data, or closures

    Posted on 2007-08-15 22:22 puras 閱讀(1353) 評(píng)論(1)  編輯  收藏 所屬分類: Groovy

    原文件:http://groovy.codehaus.org/Tutorial+2+-+Code+as+data%2C+or+closures

    譯者:puras

    1.閉包

    有一件事讓Groovy與其他大多數(shù)的編譯語(yǔ)言不同,就是你可以為第一類對(duì)象創(chuàng)建方法.你可以定義一個(gè)代碼塊,并像字符串或整數(shù)一下賦給它.查看下面的代碼:

    square = { it * it }

    在大括號(hào)中的表達(dá)式"it * it"告訴Groovy編譯器將表達(dá)式看成一段代碼.在軟件世界中,稱之為"閉包".在這個(gè)例子中,"it"是提供給方法的值的引用.之后編譯后的方法像上面一樣賦給變量"square".所以,現(xiàn)在我們可以像這樣來(lái)做些事:

    square(9)

    得到的值為81.

    這不是非常有趣的,直到我們發(fā)現(xiàn)我們可以為"square"方法傳一些值.這有一些內(nèi)建的方法為這個(gè)方法提供一個(gè)參數(shù).一個(gè)例子就是數(shù)組的"collect"方法.嘗試這樣做:

    [ 1, 2, 3, 4 ].collect(square)

    這個(gè)表達(dá)式說(shuō),使用值1, 2, 3和4創(chuàng)建一個(gè)數(shù)組,之后調(diào)用"collect"方法,將我們上面定義的閉包傳進(jìn)去.執(zhí)行這個(gè)"collect"方法遍歷數(shù)組中的每一個(gè)條目,在這些條目上調(diào)用這個(gè)閉包,之后將結(jié)果放到一個(gè)新的數(shù)組里,結(jié)果為:

    [ 1, 4, 9, 16 ]

    對(duì)于多數(shù)的方法,你可以當(dāng)作參數(shù)一樣調(diào)用閉包,查看Groovy GDK documentation.

    默認(rèn)的,閉包將一個(gè)參數(shù)稱為"it",你同樣可以使用名字參數(shù)來(lái)創(chuàng)建閉包.例如Map.each()方法,可以為閉包提供兩個(gè)變量,將它們分別綁定到Key和關(guān)聯(lián)的值上:

    printMapClosure = { key, value -> println key + "=" + value }
    [ "yue" : "wu", "lane" : "burks", "sudha" : "saseethiaseeleethialeselan" ].each(printMapClosure)

    結(jié)果:

    yue=wu
    lane=burks
    sudha=saseethiaseeleethialeselan
    2.閉包的例子

    這里有一些閉包的例子.第一個(gè)展示了兩件事.第一,閉包與它自己之外的變量相結(jié)合.更確切的說(shuō),這個(gè)閉包的目的是將數(shù)組orderParts中存儲(chǔ)的各部分,有序的結(jié)合到一起,添加(或附加)給變量fullString.變量fullString沒有在閉包中.第二件事是這個(gè)例子中不同的是閉包是"匿名"的,意思是它不需要提供一個(gè)名字,并且在each方法中指定的地方被調(diào)用.

    fullString = ""
    orderParts = ["BUY", 200, "Hot Dogs", "1"]
    orderParts.each {
    fullString += it + " "
    }
    println fullString

    你或許能猜到它輸出的是什么.

    下一個(gè)例子是另一個(gè)匿名閉包,這里,將計(jì)算存儲(chǔ)中Map中的值.

    myMap = ["asdf": 1 , "qwer" : 2, "sdfg" : 10]
    result = 0
    myMap.keySet().each( { result+= myMap[it] } )
    println result
    3.文件處理

    從文件中讀取數(shù)據(jù),是非常簡(jiǎn)單的.首先創(chuàng)建一個(gè)文本文件,并將其命名為"myfile.txt".它意味著什么并不要緊,隨便的輸入一些文字,并把它保存在你的C盤下的temp目錄里.之后在groovyConsole里輸入下面的代碼:

    yFileDirectory = "C:\\temp\\"
    myFileName = "myfile.txt"
    myFile = new File(myFileDirectory + myFileName)
    printFileLine = { println "File line: " + it }
    myFile.eachLine( printFileLine )

    這將會(huì)輸入文件中的每一行,以"File line"為前綴.第一二行代碼簡(jiǎn)單的定義指定文件所在位置的變量.變量名稱不具有什么特殊意義,并且與你可以看到的一樣, 我們?cè)谑褂盟鼈兊臅r(shí)候?qū)⑺鼈兘Y(jié)合到一起.因?yàn)樵贕roovy中反斜杠字符有特殊的意義,你需要使用兩個(gè)來(lái)告訴它你真正想要的是反斜杠.

    以"myFile = "開始的下一行,創(chuàng)建了一個(gè)新的文件對(duì)象.一個(gè)對(duì)象是有關(guān)聯(lián)的方法和數(shù)據(jù)的集合.例如,一個(gè)文件對(duì)象可以有它自己位置的描述數(shù)據(jù),在這個(gè)例子中的"C:\temp\myfile.txt",并且可能有一個(gè)方法,在文件存在的時(shí)候刪除它.在這個(gè)例子中我們只使用了"eachLine"方法,我們?cè)诖a的最后一行調(diào)用的.之前的一行是一個(gè)簡(jiǎn)單閉包的定義,你應(yīng)該已經(jīng)見過(guò)幾次了.

    4.字符串處理

    Groovy中的字符串,與Java中的字符串具有相同的功能.也就是說(shuō),一個(gè)Groovy的字符串,僅僅是一個(gè)Java字符串同一些額外添加的東西.因?yàn)檫@些,我們可以通過(guò)查閱

    stringDate = "2005-07-04"
    dateArray = stringDate.split("-")
    year = dateArray[0].toInteger()
    year = year + 1
    newDate = year + "-" + dateArray[1] + "-" + dateArray[2]

    這段代碼匯集了我們之前說(shuō)過(guò)的一些事情.這里有兩件新的事情,第一是在一個(gè)字符串上使用split方法.第二個(gè)是在字符串上調(diào)用toInteger().調(diào)用toInteger()簡(jiǎn)單的告訴Groovy你想將一個(gè)字符串像數(shù)字一樣看街.看看如果你不使用toInteger()運(yùn)行第三行運(yùn)行的代碼會(huì)發(fā)生什么.

    另一件事情是你可能注意到toInteger不在String的Java文檔中.那是因?yàn)樗窃贕roovy的String上的一個(gè)擴(kuò)展的特征.你同樣可以查看Groovy擴(kuò)展Java對(duì)像的文檔.

    Feedback

    # re: Groovy入門篇--Code as data, or closures  回復(fù)  更多評(píng)論   

    2009-01-09 22:20 by 張三
    >請(qǐng)不要發(fā)表任何與政治相關(guān)的內(nèi)容
    國(guó)外的論壇網(wǎng)站不可能有這樣的規(guī)定!
    真是可笑!
    這就是中國(guó)特色的社會(huì)主義!
    和諧!

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    posts - 47, comments - 124, trackbacks - 0, articles - 0

    Copyright © puras

    主站蜘蛛池模板: 亚洲成av人片在线观看无码不卡| 亚洲性猛交XXXX| 啦啦啦中文在线观看电视剧免费版 | 国产一级淫片免费播放| 亚洲综合精品网站| 亚洲尹人九九大色香蕉网站| 亚洲另类小说图片| 在线观看亚洲免费视频| 一级毛片完整版免费播放一区| 成人国产精品免费视频| h在线观看视频免费网站| 日韩在线免费电影| 久久精品亚洲综合| 美国免费高清一级毛片| 亚洲欧洲自拍拍偷精品 美利坚| 亚洲最大中文字幕| 丁香六月婷婷精品免费观看| 亚洲男人的天堂一区二区| h视频免费高清在线观看| 在线免费视频一区二区| 亚洲人成影院在线| 亚洲免费视频一区二区三区| 亚洲人精品午夜射精日韩| 人妻无码一区二区三区免费| 亚洲乱码日产精品a级毛片久久| caoporm超免费公开视频| 亚洲伦另类中文字幕| 女人18毛片水真多免费看| 香蕉视频免费在线播放| 成人午夜18免费看| 亚洲美女免费视频| 日本免费中文视频| 国产gv天堂亚洲国产gv刚刚碰| 国产成人亚洲精品电影| 亚洲精品国产品国语在线| 91av免费在线视频| 亚洲第一永久在线观看| 2021在线观看视频精品免费| 日产亚洲一区二区三区| 日本免费中文字幕在线看| 免费一区二区三区|