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

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

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

    莊周夢蝶

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

    Ruby 1.9概要(3)類和模塊

    Posted on 2008-10-01 13:52 dennis 閱讀(649) 評論(0)  編輯  收藏 所屬分類: 動態(tài)語言
    三、類和模塊
    1、Module#instance_methods, #private_instance_methods, #public_instance_methods Module這三個方法都將返回方法名

    的symbol組成的數組,而非過去的字符串數組。

    2、Module#const_defined?, #const_get 這兩個方法都添加一個參數flag,用來決定是否將它的ancestor中的const包括在查
    找鏈中,例如:
    module A; X = 1def foo; end end
    module B
      include A
      const_defined? 
    "X"                              # => true
      const_defined? "X",false                        #uninitialized constant
      const_get "X"                                   # => 1
      const_get "X",false                             #uninitialized constant  
    end

    3、Module#class_variable_defined?方法:
    class X; end
    X.class_variable_defined? :@@a                    
    # => false
    class X; @@a = 1 end
    X.class_variable_defined? :@@a                     
    # => true
    class_variable_{get,set}方法:

    class B; self end.class_variable_set(:@@a, "foo")        # => "foo"

    4、Module#attr等價于Module#attr_reader:
    class Test
      attr:foo
      
    def initialize
        @foo
    =3
      end
    end
    t
    =Test.new
    puts t.foo   
    #=>3
    t.foo=4     #undefined method "foo="

    5、接下來是一個bug fix的問題。下面這段代碼是為了證明對象的singleton類繼承自對象的類:
    class X;end; x=X.new; class << x;p self < X; end

    在1.8上,這段代碼打印nil,這是不符合Ruby的對象模型的,因此在1.9運行已經可以打印正確結果true了。
    如果不理解這點,參照俺過去寫的《Ruby對象模型》

    6、新增Module#module_exec方法,與Object#instance_exec類似

    7、綁定未綁定的方法時進行額外的子類型檢查,例如下面的代碼:
    class Foo; def foo; end end
    module Bar
       define_method(:foo, Foo.instance_method(:foo))
    end
    a
    =""
    a.extend Bar
    a.foo

    在1.8上,這段代碼只有當執(zhí)行到a.foo的時候才報錯:"foo":bind arguments must be an instance of Foo(TypeError)
    因為foo是Foo的instance method,因此調用者必須是Foo或者其子類的instance。 而在1.9中,在綁定還沒有綁定的方法的時候引入了額
    外的檢查,因此上面這段代碼不必等到a.foo調用就將報錯:
    class Foo; def foo; end end
    module Bar
       define_method(:foo, Foo.instance_method(:foo))   
    #=》 in "defined_method":bind arguments  must be a subclass

    of Foo
    <TypeError>
    end

    8、binding#eval方法,新增加的:
    a=1
    binding.eval(
    "p a")  => 1

    這個貌似與1.8中的:
    a=1
    eval(
    "a",binding)

    沒有什么不同。
    主站蜘蛛池模板: 成人免费网站视频www| 99久久免费国产精品热| 亚洲精品一级无码鲁丝片 | 亚洲妇熟XXXX妇色黄| 120秒男女动态视频免费| 亚洲AV香蕉一区区二区三区| 亚洲三区在线观看无套内射| 免费福利网站在线观看| 老司机午夜在线视频免费| 亚洲AV无码成人精品区蜜桃| 成人免费男女视频网站慢动作| 特级毛片爽www免费版| 亚洲国产成人久久精品app| 亚洲AV无码一区二三区| 亚洲精品在线免费观看| 一级女性全黄久久生活片免费 | 亚洲国产精品网站在线播放| 亚洲s色大片在线观看| 在线看片无码永久免费aⅴ| 免费在线看污视频| 18禁亚洲深夜福利人口| 亚洲视频在线不卡| 久久久久亚洲AV无码专区网站 | 麻豆亚洲AV永久无码精品久久| 国产一区二区三区免费在线观看| 最近免费中文字幕高清大全| 丰满妇女做a级毛片免费观看 | 在线观看人成视频免费无遮挡| 最新亚洲卡一卡二卡三新区| 亚洲邪恶天堂影院在线观看| 亚洲国产综合精品中文字幕 | 无码专区永久免费AV网站 | 永久久久免费浮力影院| 99久9在线|免费| 国产精品免费在线播放| 亚洲av色香蕉一区二区三区| 亚洲日本人成中文字幕| 久久久久亚洲Av无码专| 国产亚洲人成网站在线观看不卡| 亚洲精品国产自在久久 | 亚洲国产另类久久久精品小说|