成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Ruby函數(shù)lambda知識講解

開發(fā) 開發(fā)工具
Ruby函數(shù)lambda可以幫助我們創(chuàng)建塊。在新版本Ruby1.9中,實現(xiàn)了一個更新的Ruby函數(shù)lambda創(chuàng)建方法。希望本文介紹的內(nèi)容對大家有所幫助。

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

Ruby的Block塊是它的關(guān)鍵特色之一,用塊能夠?qū)懗龊喢髑腋叨瓤芍赜玫乃惴ā<词箾]有別的用處,它至少消弱了人們對循環(huán)敬畏的態(tài)度。這個概念在其他語言和理論中還被稱為:

◆lambda函數(shù)

◆匿名函數(shù) 

◆閉包

這是個十分令人迷惑的詞匯,因為閉包這個詞匯還指對代碼作用域的捕獲。而塊則不需要捕獲這個作用域——例如下面的代碼:

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

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

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

(lambda (arg) "hello world")

對Ruby的設(shè)計產(chǎn)生影響的另一種語言Smalltalk,采用方括號來簡潔地表達語法: 

[arg| ^"hello world"]

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

5.times {|x| puts x}

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

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

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

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

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

def predicate(&b) b end

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

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

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

現(xiàn)在,Ruby 1.9引入了一個新的、更簡潔的語法來創(chuàng)建lambda函數(shù):

 x = ->{puts "Hello Lambda"}

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

責任編輯:曹凱 來源: ddvip.com
相關(guān)推薦

2009-12-15 15:28:22

Ruby重載

2009-12-15 11:01:31

Ruby數(shù)組

2009-12-15 14:58:19

Ruby迭代器

2009-12-14 09:33:04

Ruby安裝

2009-12-17 15:11:47

Ruby百分號表示法

2009-12-14 15:30:43

安裝Ruby on R

2009-12-16 15:41:10

Ruby on Rai

2009-12-16 17:37:31

Ruby on Rai

2009-12-16 13:21:22

Ruby will_p

2009-12-18 14:35:01

Ruby奇特變量

2009-12-15 09:56:51

Ruby流程控制

2021-08-07 07:21:26

AndroidKotlinLambda

2010-04-30 13:27:26

Unix cronta

2010-05-04 12:25:28

Unix鏈接

2010-05-05 13:45:21

Unix Telnet

2010-05-04 09:22:10

Unix文件

2010-04-30 13:38:51

Unix at命令

2009-12-22 14:54:52

WCF安全

2010-05-05 13:13:55

Unix內(nèi)核

2009-12-15 13:26:33

Ruby單態(tài)方法
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩欧美中文字幕在线观看 | 精品国产乱码久久久久久牛牛 | 红桃视频一区二区三区免费 | 丁香六月激情 | 国产精品嫩草影院精东 | 在线免费观看日本视频 | 欧美精品一区二区在线观看 | 亚洲一区二区三区在线视频 | 久久久一二三区 | 91久久国产综合久久91精品网站 | 天天舔天天 | 中文字幕一区二区三区在线观看 | 日韩三片 | 国产丝袜一区二区三区免费视频 | 亚洲综合在线一区二区 | 久久精品91久久久久久再现 | 久久一区二区三区四区五区 | 久久免费精品 | 精品久久久久久久久久久久久久 | 亚洲日本视频 | 国产ts人妖系列高潮 | 日本精品视频在线观看 | 秋霞电影一区二区 | 亚洲精品亚洲人成人网 | 国产精品亚洲综合 | 精品国产欧美一区二区三区不卡 | 精品国产乱码久久久久久老虎 | 午夜精品一区二区三区三上悠亚 | 成人免费观看网站 | 午夜男人天堂 | 国产成人精品久久 | 免费一看一级毛片 | 中文字幕 在线观看 | 日韩视频―中文字幕 | 久久久国产精品 | 亚洲欧美日韩国产综合 | 在线一区二区三区 | 免费看a| 91小视频在线 | 污视频在线免费观看 | 欧美三级在线 |