<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)

    沒有什么不同。
    主站蜘蛛池模板: 国产成人A人亚洲精品无码| 国产精品另类激情久久久免费| 亚洲一区二区三区无码影院| 亚洲国产成人精品无码区花野真一| 国产精品免费精品自在线观看| 久久亚洲AV成人无码| 久久国产乱子伦免费精品| 337p日本欧洲亚洲大胆色噜噜| 99免费在线观看视频| 亚洲最大在线视频| 歪歪漫画在线观看官网免费阅读| 亚洲Av高清一区二区三区| 无人在线观看免费高清视频| 亚洲色偷偷综合亚洲av78| 日本一线a视频免费观看| 黄色毛片视频免费| 亚洲日本va在线视频观看| 精品视频一区二区三区免费| 内射干少妇亚洲69XXX| 免费A级毛片无码免费视| 亚洲一区二区三区写真| 免费在线观看毛片| 久久久精品免费国产四虎| 日韩精品一区二区亚洲AV观看| 久久不见久久见中文字幕免费| 亚洲日本一线产区和二线产区对比| 四虎永久成人免费| 免费无码又爽又刺激高潮软件| 亚洲精品国产成人99久久| 我要看WWW免费看插插视频| 国产精品日本亚洲777| 亚洲最大AV网站在线观看| 99蜜桃在线观看免费视频网站| 亚洲三级中文字幕| 亚洲日韩VA无码中文字幕| 日韩精品无码免费一区二区三区 | 亚洲一区二区在线免费观看| 亚洲人成网站免费播放| 中美日韩在线网免费毛片视频 | 在线日本高清免费不卡| 亚洲av无码成人影院一区|