国产探花免费观看_亚洲丰满少妇自慰呻吟_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,大家還有什么不明白的地方嗎?如果還有需要了解的內容,就繼續關注武林技術頻道吧!

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

圖片精選

主站蜘蛛池模板: 成都市| 樟树市| 稻城县| 板桥市| 高邑县| 茂名市| 南皮县| 和平县| 白银市| 新竹县| 万全县| 鄂托克前旗| 百色市| 抚顺县| 炎陵县| 岳阳市| 镇康县| 隆安县| 明星| 汾阳市| 安塞县| 安仁县| 娱乐| 宜阳县| 新竹县| 根河市| 彭山县| 海口市| 民勤县| 亚东县| 右玉县| 科技| 浙江省| 嫩江县| 来安县| 浦东新区| 香河县| 栾城县| 田阳县| 公安县| 班戈县|