校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 詳解Ruby中的代碼塊對象Proc

詳解Ruby中的代碼塊對象Proc

熱門標簽:電銷機器人廠商代理 高德地圖標注客服 白銀外呼paas系統(tǒng) 徐州網(wǎng)絡(luò)外呼系統(tǒng)哪個好 地圖標注賺錢項目注冊 常德電銷平臺外呼系統(tǒng)軟件價格 滴滴外呼系統(tǒng) 百度地圖標注自定義圖片 湖州u友防封電銷卡

Proc對象

Proc是由塊轉(zhuǎn)換來的對象。創(chuàng)建一個Proc共有四種方法,分別是:

示例代碼

# 法一
inc = Proc.new { | x | x + 1}
inc.call(2) #=> 3

# 法二
inc = lambda {| x | x + 1 }
inc.call(2) #=> 3

# 法三
inc = ->(x) { x + 1}
inc.call(2) #=> 3

# 法四
inc = proc {|x| x + 1 }
inc.call(2) #=> 3

除了上面的四種之外,還有一種通過操作符的方式,將代碼塊與Proc對象進行轉(zhuǎn)換。如果需要將某個代碼塊作為參數(shù)傳遞給方法,需要通過為這個參數(shù)添加符號,并且其位置必須是在參數(shù)的最后一個

符號的含義是: 這是一個Proc對象,我想把它當成代碼塊來使用。去掉符號,將能再次得到一個Proc對象。

示例代碼

def my_method(the_proc)
  the_proc
end

p = my_method {|name| “Hello, #{name} !”}
p.class  #=> Proc
p.call(“Bill”)  #=> “Hello,Bill”


def my_method(greeting)
  “#{greeting}, #{yield}!”
end

my_proc = proc { “Bill” }
my_method(“Hello”, my_proc)

一些需要注意的地方

在使用block時,我會忽略proc的存在,我將proc定位為一個幕后的工作者。我經(jīng)常寫類似下面的代碼,

 def f(...)
  ...
  yield
  ...
 end

 def f(..., p)
  ...
  p.call
  ...
 end

 def f(..., p)
  instance_eval p
  ...
 end

 def f(..., p)
  ...
  defime_method m, p
  ...
 end

有些新手會寫類似下面的一執(zhí)行就會報錯的代碼,

 

 def f(..., p)
  instance_eval p
 end

 def f(..., p)
  instance_eval p.call
 end

也有這樣寫的,

 def f(..., p)
  instance_eval do
   p.call
  end
 end

或者

 def f(...)
  instance_eval do
   yield
  end
 end

我甚至寫過類似下面的代碼,

 def f(...)
  instance_eval yield
 end

我們經(jīng)常在該掛block的時候,卻把proc對象當參數(shù)傳給方法了, 或者不明白p就是block可以直接交給方法使用,我曾經(jīng)也犯過這樣的錯誤就是因為沒有把block和proc正確的區(qū)分開來, p是block, p是proc,不到萬不得已的情況下不要顯式地創(chuàng)建proc,每當我對block和proc之間的關(guān)系犯糊涂時,我就會念上幾句。

您可能感興趣的文章:
  • 深入理解Ruby中的代碼塊block特性
  • Ruby中的block代碼塊學習教程
  • 詳解Ruby中的代碼塊及其參數(shù)傳遞

標簽:梧州 公主嶺 永州 荊門 三沙 張家界 遼寧 普洱

巨人網(wǎng)絡(luò)通訊聲明:本文標題《詳解Ruby中的代碼塊對象Proc》,本文關(guān)鍵詞  詳解,Ruby,中的,代碼,塊,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解Ruby中的代碼塊對象Proc》相關(guān)的同類信息!
  • 本頁收集關(guān)于詳解Ruby中的代碼塊對象Proc的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 阜城县| 涡阳县| 仁化县| 银川市| 永康市| 万年县| 商河县| 河南省| 开封县| 台南县| 柯坪县| 宜川县| 寿阳县| 八宿县| 龙口市| 湄潭县| 四子王旗| 沙雅县| 利川市| 大庆市| 玛多县| 宽城| 阜城县| 栾川县| 偏关县| 屏边| 开封县| 柞水县| 喀喇| 潼南县| 蕉岭县| 措美县| 剑阁县| 铜陵市| 肃北| 双桥区| 密云县| 茶陵县| 扎囊县| 托克托县| 自贡市|