日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Ruby函數(shù)lambda知識(shí)講解

Ruby語(yǔ)言對(duì)于一個(gè)剛剛基礎(chǔ)編程語(yǔ)言不久的朋友來(lái)說(shuō),是一個(gè)非常陌生的東西。不過(guò),它的出現(xiàn)可以幫助我們快速簡(jiǎn)便的完成一些功能需求。在這里,我們就為大家介紹其中Ruby函數(shù)lambda的一些用法。#t#

十載的博望網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都營(yíng)銷網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整博望建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“博望網(wǎng)站設(shè)計(jì)”,“博望網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

Ruby的Block塊是它的關(guān)鍵特色之一,用塊能夠?qū)懗龊?jiǎn)明且高度可重用的算法。即使沒(méi)有別的用處,它至少消弱了人們對(duì)循環(huán)敬畏的態(tài)度。這個(gè)概念在其他語(yǔ)言和理論中還被稱為:

◆lambda函數(shù)

◆匿名函數(shù) 

◆閉包

這是個(gè)十分令人迷惑的詞匯,因?yàn)殚]包這個(gè)詞匯還指對(duì)代碼作用域的捕獲。而塊則不需要捕獲這個(gè)作用域——例如下面的代碼:

x = lambda {|x,y| x + y}

沒(méi)有使用自由變量(沒(méi)有綁定的變量;參數(shù)列表中正式聲明x和y),因此無(wú)須創(chuàng)建一個(gè)閉包。

塊在其他語(yǔ)言中有很多種多樣的表現(xiàn)形式,有的簡(jiǎn)潔有的冗長(zhǎng)。比如對(duì)Ruby影響深遠(yuǎn)的LISP語(yǔ)言,所使用的塊語(yǔ)法為:

(lambda (arg) "hello world")

對(duì)Ruby的設(shè)計(jì)產(chǎn)生影響的另一種語(yǔ)言Smalltalk,采用方括號(hào)來(lái)簡(jiǎn)潔地表達(dá)語(yǔ)法: 

[arg| ^"hello world"]

Ruby中,塊的最方便也最常使用的語(yǔ)法是作為函數(shù)的參數(shù)。它允許簡(jiǎn)單地在函數(shù)名后面添加一個(gè)用do/end 或者花括號(hào){ / }包圍的代碼塊。例如:

5.times {|x| puts x}

這非常的方便,同時(shí)也產(chǎn)生了Builder這樣的習(xí)慣性用法。Builder可以通過(guò)嵌套的塊來(lái)很容易地創(chuàng)建分層的數(shù)據(jù)結(jié)構(gòu)。(提示:就在一月下旬InfoQ即將發(fā)表一篇詳細(xì)描述如何在Ruby中創(chuàng)建Builder的文章)。

不過(guò),還有一個(gè)問(wèn)題:要傳遞一個(gè)以上的塊給函數(shù)或方法就沒(méi)那么簡(jiǎn)單了。它可以實(shí)現(xiàn),但不能用這么短的語(yǔ)法,得使用Proc.new {} 或Ruby函數(shù)lambda來(lái)創(chuàng)建塊。雖然還不至于恐怖,但這樣會(huì)使代碼冗長(zhǎng),而且還引入了一些不受歡迎的詞匯把代碼搞得凌亂不堪。(注意:Proc.new {} 和 lambda {}也有些微妙的不同,但本文不關(guān)注它們)。

在特定情況下可能有變通的方法。例如,如果一個(gè)API調(diào)用需要多個(gè)塊,輔助函數(shù)就會(huì)嵌入到類中,這樣就產(chǎn)生了兩個(gè)作用:a) 輔助了塊 b) 帶有貌似命名參數(shù)的負(fù)作用:

find (predicate {|x,y| x < y}, predicate{|x,y| x > 20})

其中predicate函數(shù)僅僅是:

def predicate(&b) b end

它用來(lái)返回這個(gè)塊。不論這是否合適或者不依賴于特定情況。在這種情況下,下面的代碼——毋庸置疑地——更能表達(dá)清楚,也能起到相同的作用。

find (lambda{|x,y| x < y}, lambda {|x,y| x > 20})

為什么呢?因?yàn)閘ambda泄露了實(shí)現(xiàn)它的細(xì)節(jié)——若帶有一個(gè)塊參數(shù),就不需要額外的關(guān)鍵詞。predicate的解決方案對(duì)代碼做了注解,并產(chǎn)生了Ruby函數(shù)lambda。需要明確的是,這只是變通的方法。

現(xiàn)在,Ruby 1.9引入了一個(gè)新的、更簡(jiǎn)潔的語(yǔ)法來(lái)創(chuàng)建lambda函數(shù):

 x = ->{puts "Hello Lambda"}

新的語(yǔ)法更加簡(jiǎn)短,還拋棄了那個(gè)不知所云的術(shù)語(yǔ)lambda。需要明確的是,這是個(gè)語(yǔ)法糖衣。不過(guò)它的確有助于寫(xiě)出可讀性非常好的API代碼。其中一些API可以被稱為“內(nèi)部DSLs”,盡管它們的定義都很模糊。出于這些,新的Ruby函數(shù)lambda定義幫我們擺脫了那個(gè)夾在要么是純領(lǐng)域要么是問(wèn)題確定的代碼中間的晦澀的術(shù)語(yǔ)“l(fā)ambda”。


標(biāo)題名稱:Ruby函數(shù)lambda知識(shí)講解
網(wǎng)站鏈接:http://m.5511xx.com/article/cocposs.html