麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Ruby > 正文

解析Ruby中的Proc類及Proc的類方法Proc.new的使用介紹

2020-02-24 15:36:48
字體:
供稿:網(wǎng)友

Proc是通過對(duì)象化塊及其上下文獲得的過程對(duì)象,可以將proc用作匿名函數(shù),但它不導(dǎo)入局部變量的范圍,今天武林技術(shù)頻道小編解析Ruby中的Proc類及Proc的類方法Proc.new的使用介紹,希望對(duì)你有幫助!

在下例中,正因?yàn)镻roc一直保持著局部變量的作用域,所以才能調(diào)用var變量。

ruby;">var = 1$foo = Proc.new { var }var = 2def foo $foo.callendp foo    # => 2

從生成Proc的方法中返回以后,若Proc中出現(xiàn)return或retry的話,會(huì)引發(fā)LocalJumpError異常。

def foo proc { return }endfoo.call# => in `call': return from proc-closure (LocalJumpError)def foo proc { retry }endfoo.call# => in `call': retry from proc-closure (LocalJumpError)

若在Proc前面加上"&"并將其傳給一個(gè)帶塊的方法時(shí),其運(yùn)作情形類似于調(diào)用塊。但從嚴(yán)格意義上講,其間還存在以下不同。

# 沒問題(1..5).each { break }# 在ruby 1.6.7, 1.8中沒問題。在1.6.8中則發(fā)生異常proc = Proc.new { break }(1..5).each(&proc)# 在ruby 1.6 中是 LocalJumpError# 在ruby 1.8 中,再次運(yùn)行eachproc = Proc.new { retry }(1..5).each(&proc)#=> retry from proc-closure (LocalJumpError)

這正是Proc對(duì)象用作調(diào)用塊時(shí)的限制。

Proc.newProc.new { ... }

對(duì)塊及其context進(jìn)行對(duì)象化處理之后返回結(jié)果。

若沒有給出塊的話,就會(huì)把調(diào)用該方法的方法所帶的塊轉(zhuǎn)換為Proc對(duì)象并將其返回。

def foo  pr = Proc.new  pr.call(1,2,3)endfoo {|args| p args }# => [1, 2, 3]

?

Proc.new方法深入
Proc.new對(duì)塊及其context進(jìn)行對(duì)象化處理之后返回結(jié)果。

若沒有給出塊的話,就會(huì)把調(diào)用該方法的方法所帶的塊轉(zhuǎn)換為Proc對(duì)象并將其返回。

def foo  pr = Proc.new  pr.call(1,2,3)endfoo {|args| p args }# => [1, 2, 3]這與下例相同def foo yield(1,2,3)endfoo {|args| p args }# => [1, 2, 3]

若主調(diào)方法并沒有帶塊時(shí),則引發(fā)ArgumentError異常。

def foo Proc.newendfoo# => -:2:in `new': tried to create Proc object without a block (ArgumentError)     from -:2:in `foo'     from -:4

在使用Proc.new時(shí),若定義了Proc#initialize方法的話,就在對(duì)象初始化時(shí)調(diào)用該方法。除此以外,它和proc是相同的。

利用 Proc.new 方法,或者對(duì) proc 方法指定塊,都可以創(chuàng)建代表塊的 Proc 對(duì)象。

通過調(diào)用 Proc#call 方法執(zhí)行塊。調(diào)用 Proc#call 方法時(shí)的參數(shù)會(huì)作為塊變量,塊中最后一個(gè)表達(dá)式的值則為 Proc#call 的返回值。Proc#call 還有一個(gè)名稱叫 Proc#[]。

# 判斷西歷的年是否為閏年的處理leap = Proc.new do |year| year % 4 == 0 && year % 100 != 0 || year % 400 ==0end p leap.call(2000)  #=> truep leap[2013]     #=> falsep leap[2016]     #=> true

將塊變量設(shè)置為 |* 數(shù)組 | 的形式后,就可以像方法參數(shù)一樣,以數(shù)組的形式接收可變數(shù)量的參數(shù)。

double = Proc.new do |*args| args.map{|i| i * 2 }  # 所有元素乘兩倍end p double.call(1, 2, 3)  #=> [2, 3, 4]p double[2, 3, 4]     #=> [4, 6, 8]

除此以外,定義普通方法時(shí)可使用的參數(shù)形式,如默認(rèn)參數(shù)、關(guān)鍵字參數(shù)等,幾乎都可以被用于塊變量的定義,并被指定給 Proc#call 方法。

 以上就是關(guān)于解析Ruby中的Proc類及Proc的類方法Proc.new的使用介紹,你可以通過上面所介紹的方法進(jìn)行操作,希望這篇文章能夠幫助到你。更多關(guān)于編程的信息,可以關(guān)注武林技術(shù)頻道網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 成人国产视频在线观看 | 日本在线精品视频 | 日本黄色免费片 | 亚洲成人国产综合 | 久久国产精品无码网站 | 国产羞羞视频免费在线观看 | 国产一级淫片a级aaa | 欧美亚洲另类在线 | 欧美一级网 | 一区二区三区欧洲 | 成人宗合网 | 亚洲成人黄色片 | 国产一区二区亚洲 | 日日噜噜噜噜久久久精品毛片 | 久久久久性 | 国产精品观看在线亚洲人成网 | 国产亚洲美女精品久久久2020 | 久久99精品久久久久久小说 | 国产黄色网 | 久久99精品久久久久久青青日本 | 91精品国产91久久久久久丝袜 | 国产资源在线视频 | 99国语露脸久久精品国产ktv | 久久精热| 国产一级一区 | 欧美亚洲免费 | 最近国产中文字幕 | 亚洲一区二区在线视频 | 97人操| 亚洲成人国产综合 | 99精品视频免费看 | 精品国产99久久久久久宅男i | 免费a级网站 | 精品亚洲综合 | 欧美成人区| 中文字幕亚洲视频 | 久久久久久久一区二区三区 | 91美女福利视频 | 一级黄色影片在线观看 | caoporn国产一区二区 | 国产美女视频黄a视频免费 日韩黄色在线播放 |