亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Ruby > 正文

Ruby中的代碼塊block的特性

2020-02-24 15:39:28
字體:
來源:轉載
供稿:網友

Ruby中的block通常被轉換成代碼,block最初看起來有點奇怪,因為許多程序語言病沒有這樣的東西,接下來武林技術頻道小編帶大家一起來看看Ruby中的代碼塊block的特性吧!

block是什么?

在Ruby中,block并不罕見。官方對block的定義是“一段被包裹著的代碼”。當然,我覺得這樣的解釋不會讓你變的更明白。

對block的一種更簡單的描述是“一個block就是一段存儲在一個變量中的代碼,它和其他的對象一樣,可以被隨時的運行”

然后,咱們通過看一些代碼,之后再把這些代碼重構成Ruby中的block形式。通過代碼來實際的感受,更加直觀。

比如,對兩個數做加法?

ruby;">puts 5 + 6# => 11

嗯,這樣寫是可以的。但是,這樣的代碼只做到了block定義的前半部分——它是一段代碼。但是它并沒有“被包裹起來”,也沒有“存儲在一個變量中”。

所以,我們需要繼續修改。不過在把它包裹起來之前,我們先改進一下,讓它看起來更通用。

a = 5b = 6puts a + b# => 11

好~這樣就可以了——我們用變量替換了之前的數字。這段代碼執行了一個相加的過程,但是,它仍然沒有被儲存在一個變量中。

現在,咱們來實現它。

addition = lambda { |a, b| return a+b }puts addition.call(5, 6)# => 11

好啦,現在你把它很好的包裹起來了——這就是一個block!

使用‘lambda'關鍵字,是Ruby中創建block的最常見的方法。還有其他的方法也可以做到,不過現在先不管其他的方法。

這個時候你可能會想“等等,這玩意兒看起來就像是一個方法(method),除了沒有類和對象“。你說的沒錯。甚至可以這樣去理解:一個block就像一個方法(method),但是它不與任何的對象關聯。

咱們繼續,更仔細的來看看block。

一個塊包含的代碼塊。你可以分配一個名稱,一個塊。 塊中的代碼總是被括在大括號里({})或是do...end里。

[1, 2, 3].each do |i| puts iend#=> 1  2  3

上面這個例子, each方法后面加一個do...end結構,那就是一個塊。

Ruby中任何一個方法你都可以傳遞一個塊。

  def test;end  test{ puts i}def test  yield end test{puts "hello test!"} def test(x)  yield(x) end test('world!'){|x| puts "hello #{x}"}

yield關鍵字不僅可以掛載塊(block)代碼,而且可以給塊傳遞參數。

def test(&block)  block.call("world") end test{|msg| puts "hello #{msg}"}block到了方法內部,已經被&轉化為了一個Proc對象。 def test(&block)  inner_test(&block) end def inner_test  yield("haha!") end test{|msg| puts "hello #{msg}"}

test方法傳進去的block被轉化為了Proc對象,而其內部的inner_test又利用「&」把這個Proc對象轉化為了塊(block)

block是對象嗎?當然,就像Ruby中的其它東西一樣,block也是對象。

empty_block = lambda { }puts empty_block.object_id# => 28765760puts empty_block.class# => Procputs empty_block.class.superclass# => Object

如你所見,我們創建的這個block有一個 object_id ,屬于 Proc 類(這是Ruby里面對一個block的稱呼),而這個類本身就是 Object 的子類。

我們甚至可以反過來,從block定義方法(method)。一個方法(method)就是綁定了一個對象的block,從而可以訪問對象的“狀態”。

下面我來演示一下逆向的用一個方法(method)來創建一個block。有一些更傳統的方法來實現前面的問題(同時請原諒我糟糕的對象建模)

class Calculator def add(a, b)  return a+b endendputs Calculator.new.add(5, 6)# => 11

這段代碼當然能夠很好的工作。然后,做一點修改。

class Calculator def add(a, b)  return a+b endendaddition_method = Calculator.new.method("add")addition = addition_method.to_procputs addition.call(5, 6)# => 11

現在呢,你就把一個傳統的方法(method)轉換為了一個block!

block化你的代碼!

咱們來構造4個block,分別用來進行加減乘除的運算。每個block應該接受兩個值作為變量,然后執行操作并返回結果。

Addition = lambda { |a, b| return a+b }Subtraction = lambda { |a, b| return a-b }Multiplication = lambda { |a, b| return a*b }Division = lambda { |a, b| return a/b }# 使用的時候通過call來使用Addition.call(5, 6)# => 11

以上就是我們為各位朋友們整理的關于Ruby中的代碼塊block的特性,各位朋友們看完之后,有沒有學習到這些知識呢?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97色在线观看免费视频| 日韩精品中文字幕视频在线| 69国产精品成人在线播放| 久久精品国产99国产精品澳门| 久久综合色影院| 欧美亚洲国产视频小说| 欧美成人午夜激情| 91久久精品久久国产性色也91| 中文亚洲视频在线| 91精品久久久久久久久不口人| 欧美精品一区二区免费| 91网站在线免费观看| 国产成人亚洲综合91精品| 国产一区视频在线| 国产精品国产自产拍高清av水多| 深夜精品寂寞黄网站在线观看| 日韩电影在线观看永久视频免费网站| 亚洲视频综合网| 精品视频在线播放色网色视频| 日韩欧美国产高清91| 国产盗摄xxxx视频xxx69| 亚洲午夜久久久久久久| 在线精品国产成人综合| 日韩av在线播放资源| 欧美高清视频一区二区| 亚洲最大的网站| 国产成人综合久久| 97涩涩爰在线观看亚洲| 国产免费一区二区三区在线能观看| 国产成人自拍视频在线观看| 一本久久综合亚洲鲁鲁| 97精品国产91久久久久久| 欧美性极品xxxx做受| 亚洲精品理论电影| 日本韩国在线不卡| 成人亚洲综合色就1024| 欧美黑人巨大精品一区二区| 97免费在线视频| 亚洲精品狠狠操| 亚洲精品免费网站| 日韩在线中文字| 日韩欧美在线中文字幕| 亚洲精品v欧美精品v日韩精品| 在线观看成人黄色| 尤物yw午夜国产精品视频| 欧美成人第一页| 亚洲风情亚aⅴ在线发布| 欧美重口另类videos人妖| 亚洲国产欧美久久| 亚洲男人av电影| 精品国产户外野外| 在线日韩日本国产亚洲| 欧美尤物巨大精品爽| 亚洲欧美日韩在线一区| 日韩精品免费电影| 亚洲毛片在线观看| 国产精品久久久久久网站| 久久天天躁狠狠躁夜夜爽蜜月| 中文字幕国产精品久久| 热久久免费国产视频| 国产97在线|亚洲| 色香阁99久久精品久久久| 日韩美女视频在线观看| 欧美一级在线亚洲天堂| 亚洲日本欧美日韩高观看| 成人亚洲激情网| 欧美激情亚洲视频| 久久6精品影院| 91精品国产乱码久久久久久久久| 日韩欧美在线看| 欧美xxxx14xxxxx性爽| 久久久99久久精品女同性| 国产中文日韩欧美| 久久国产精品99国产精| 亚洲一区二区福利| 国内精品小视频| 91久久久亚洲精品| 午夜精品美女自拍福到在线| 国产精品偷伦视频免费观看国产| 国产亚洲一区精品| 日韩中文视频免费在线观看| 亚洲精品一区二区网址| 国产午夜精品一区理论片飘花| 亚洲国产成人精品久久久国产成人一区| 国产精品狼人色视频一区| 亚洲国产女人aaa毛片在线| 国产成人极品视频| 欧美日韩第一视频| 国产视频精品在线| 亚洲乱亚洲乱妇无码| 国产成人精品免高潮费视频| 国产精品美女免费看| 亚洲欧洲一区二区三区在线观看| 日韩一级黄色av| 亚洲精品一区久久久久久| 亚洲成人激情图| 亚洲精品视频免费| 欧美整片在线观看| 日韩精品视频免费专区在线播放| 日本精品性网站在线观看| 在线成人一区二区| 久久久亚洲福利精品午夜| 欧美成人h版在线观看| 亚洲精品美女久久久| 97精品国产97久久久久久| 欧美日韩另类字幕中文| 日本三级久久久| 欧洲亚洲妇女av| xxxx性欧美| 久久综合五月天| 不卡毛片在线看| 久久精品国产2020观看福利| 日韩欧美精品中文字幕| 久久久人成影片一区二区三区| 69国产精品成人在线播放| 国产精品免费看久久久香蕉| 日韩福利视频在线观看| 久久99热精品这里久久精品| 日本一区二区在线免费播放| 国产精品一区二区三区久久| 亚洲国产精品99| 日韩经典中文字幕在线观看| 欧美激情一区二区三区在线视频观看| 国产综合久久久久| 国产成人aa精品一区在线播放| 欧美激情免费视频| 亚洲综合成人婷婷小说| 成人欧美在线观看| 亚洲成人1234| 国产精品视频区| 国产99视频精品免视看7| 国产福利视频一区| 欧美黑人xxxx| 欧美激情区在线播放| 日韩精品中文在线观看| 911国产网站尤物在线观看| 日本亚洲精品在线观看| 亚洲人午夜精品| 欧美日韩一区二区精品| 亚洲国产高清高潮精品美女| 国产精品久久久久久久电影| 亚洲精品91美女久久久久久久| 国产成人精品视频| 日韩专区在线播放| 精品国产乱码久久久久久天美| 亚洲国产精品热久久| 国产午夜精品免费一区二区三区| 中文字幕亚洲图片| 国产精品久久网| 欧美性猛xxx| 久久五月天色综合| 中文字幕亚洲无线码a| 九九久久综合网站| 亚洲美女动态图120秒| 亚洲一区二区三区在线视频| 在线不卡国产精品| 久久久久久久久网站| 国产精品视频白浆免费视频| 精品av在线播放| 亚洲人成绝费网站色www| 国产综合久久久久| 国产精品久久久久久久久久小说| 亚洲综合在线做性| 精品成人国产在线观看男人呻吟|