国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Ruby > 正文

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

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

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

在下例中,正因為Proc一直保持著局部變量的作用域,所以才能調用var變量。

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

從生成Proc的方法中返回以后,若Proc中出現return或retry的話,會引發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前面加上"&"并將其傳給一個帶塊的方法時,其運作情形類似于調用塊。但從嚴格意義上講,其間還存在以下不同。

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

這正是Proc對象用作調用塊時的限制。

Proc.newProc.new { ... }

對塊及其context進行對象化處理之后返回結果。

若沒有給出塊的話,就會把調用該方法的方法所帶的塊轉換為Proc對象并將其返回。

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

?

Proc.new方法深入
Proc.new對塊及其context進行對象化處理之后返回結果。

若沒有給出塊的話,就會把調用該方法的方法所帶的塊轉換為Proc對象并將其返回。

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]

若主調方法并沒有帶塊時,則引發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時,若定義了Proc#initialize方法的話,就在對象初始化時調用該方法。除此以外,它和proc是相同的。

利用 Proc.new 方法,或者對 proc 方法指定塊,都可以創建代表塊的 Proc 對象。

通過調用 Proc#call 方法執行塊。調用 Proc#call 方法時的參數會作為塊變量,塊中最后一個表達式的值則為 Proc#call 的返回值。Proc#call 還有一個名稱叫 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

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

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]

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

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

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

圖片精選

主站蜘蛛池模板: 广水市| 平乡县| 宁明县| 驻马店市| 东港市| 桂林市| 鄂托克前旗| 云梦县| 伊金霍洛旗| 曲靖市| 辽宁省| 临高县| 高州市| 昌都县| 原平市| 宁晋县| 平利县| 湘乡市| 北宁市| 威宁| 德江县| 高安市| 台前县| 泊头市| 子长县| 滨州市| 青海省| 扶风县| 朝阳县| 龙海市| 徐闻县| 巨野县| 孝感市| 十堰市| 阿拉善右旗| 丽水市| 吉安市| 平塘县| 阿勒泰市| 武宣县| 秦安县|