<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    Ruby 1.9概要(4) Block和Proc

    Posted on 2008-10-02 13:54 dennis 閱讀(687) 評論(0)  編輯  收藏 所屬分類: 動態語言
    1、Proc加了新方法Proc#yield,這只是Proc#call的別名方法,是為了能讓Proc也可以像block那樣傳入方法并且調用yield。
    a_proc = Proc.new {|a,b| a+b}
    a_proc.
    yield(1,2# => 3

    def test(&block)
      block.
    yield(1,2,3)
    end
    test do 
    |a,b|
       a
    +b   # => 3
    end
    test 
    &a_proc # =>3

    2、沒有參數的block的基數(參數個數,arity):
    1.8
      
    lambda{}.arity  #=> -1
    1.9
      
    lambda{}.arity #=> 0
    所謂arity就是方法調用無法忽略的參數個數。這跟Erlang,Prolog中的arity的概念并無二致。

    3、proc關鍵字現在是Proc.new的同義詞,proc在1.8的時候跟lambda關鍵字是同義詞,也就是proc定義的是一個lambda而非字面

    意義上的Proc,1.9改過來了。
    1.9:

    proc{
    |a,b|}.arity        # => 2
    proc{|a,b|}.call(1)        # => nil
    Proc.new{|a,b|}.arity        # => 2
    Proc.new{|a,b|}.call(1)        # = nil

    1.8:
    proc{|a,b|}.arity        # => 2
    proc{|a,b|}.call(1)        # => ERROR: (eval):1: wrong number of arguments (1 for 2)
    Proc.new{|a,b|}.arity        # => 2
    Proc.new{|a,b|}.call(1)        # => nil

    1.8時候第二個調用出錯的原因在于lambda在調用參數過多過少的時候都將報error,這是lambda跟Proc的一個區別之一。

    4、Proc#lambda? 用來判斷某個Proc是否具有lambda語義或者block語義:
    lambda{}.lambda?  #=>true
    proc{}.lambda# =>false
    Proc.new{}.lambda# =>false



    主站蜘蛛池模板: 日本一区二区三区免费高清在线| 亚洲一线产区二线产区区| 一级毛片成人免费看a| 国产三级免费观看| 暖暖免费中文在线日本| 免费国产a国产片高清网站| 免费人妻精品一区二区三区| 免费一级毛片正在播放| 视频一区在线免费观看| 亚洲一级特黄无码片| 怡红院免费的全部视频| 亚洲Av熟妇高潮30p| **aaaaa毛片免费同男同女| 亚洲av永久无码嘿嘿嘿| 日本无卡码免费一区二区三区| 在线精品自拍亚洲第一区| 亚洲国产综合久久天堂| 国产成人自产拍免费视频| 亚洲国产精品成人精品无码区| 久久这里只精品热免费99| 亚洲人成综合在线播放| 午夜国产羞羞视频免费网站| 国产免费MV大全视频网站| 亚洲精品乱码久久久久久蜜桃不卡 | 久久亚洲最大成人网4438| 成人免费男女视频网站慢动作| 国产亚洲福利精品一区二区 | 亚洲日本va午夜中文字幕一区| 7723日本高清完整版免费| 国产成人精品日本亚洲语音| 亚洲欧洲久久久精品| 久久久久久AV无码免费网站下载| 亚洲一区在线观看视频| 免费萌白酱国产一区二区| 国产免费爽爽视频在线观看| 亚洲导航深夜福利| 免费在线观看你懂的| 中文字幕在线免费观看| 美女黄频免费网站| 久久精品国产亚洲av水果派| 性做久久久久免费看|