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

首頁 > 編程 > Ruby > 正文

詳解Ruby中的代碼塊對象Proc

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

block代碼基本上是學習Ruby的第一個障礙,接下來,武林技術頻道小編將詳細描述Ruby中的block代碼及Proc參數,需要它的朋友可以參考下文哦!

Proc對象

Proc是由塊轉換來的對象。創建一個Proc共有四種方法,分別是:

示例代碼

ruby;"># 法一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對象進行轉換。如果需要將某個代碼塊作為參數傳遞給方法,需要通過為這個參數添加&符號,并且其位置必須是在參數的最后一個

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

示例代碼

def my_method(&the_proc)  the_procendp = my_method {|name| “Hello, #{name} !”}p.class  #=> Procp.call(“Bill”)  #=> “Hello,Bill”def my_method(greeting)  “#{greeting}, #{yield}!”endmy_proc = proc { “Bill” }my_method(“Hello”, &my_proc)

一些需要注意的地方

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

 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

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

?

 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

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

以上就是我們為各位朋友們總結的詳解Ruby中的代碼塊對象Proc,大家還有什么不明白的地方嗎?如果還有需要了解的內容,就繼續關注武林技術頻道吧!

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

圖片精選

主站蜘蛛池模板: 砀山县| 江达县| 黄梅县| 锡林浩特市| 高雄县| 威海市| 平阳县| 樟树市| 舟曲县| 赞皇县| 邓州市| 连南| 黄浦区| 曲阳县| 申扎县| 孟津县| 大足县| 沾化县| 桦南县| 城步| 辰溪县| 双流县| 台南县| 太白县| 南溪县| 柳林县| 南康市| 常州市| 寻乌县| 碌曲县| 阿勒泰市| 麻江县| 靖远县| 股票| 永和县| 礼泉县| 萨嘎县| 榆社县| 遂川县| 道真| 西林县|