Ruby 1 9 3 類和模組

2021-08-29 11:39:21 字數 1492 閱讀 1624

module#instance_methods, #private_instance_methods, #public_instance_methods

在1.9中返回乙個由symbol構成的陣列,而不是string陣列

class x; def foo; end; end

x.instance_methods(false) # => [:foo] in 1.9, ["foo"] in 1.8

module#const_defined?, #const_get

在1.9中可以接受乙個額外的引數,指明是否要把父類的const也考慮進來,預設是true

module a; x=1; end

module b; include a; end

b.const_defined? "x" # => true

b.const_defined? "x", false # => false

b.const_get "x", false # uninitialized const exception

#class_variable_set, #class_variable_get

現在是public method了, 1.8裡面這個方法是private的

class aa; self; end.class_variable_set(:@aa, "foo") # =>"foo" in 1.9, throw nomethoderror in 1.8

單間類現在是物件的類的子類

很難理解的乙個特性,比較

class x; end

x = x.new; class << x; self < x; end # => true in 1.9, nil in 1.8

為了搞清楚單件類(singleton)的概念,可以看看

這篇文章先。但是從這篇文章出發,似乎1.8裡面上面的片斷也應該返回true才對啊?這個改動大概是乙個bug fix? 達人指教。

增加module.module_exec方法

和object#instance_exec類似

binding#eval

a = 1

binding.eval("a") # => 1 in 1.9, nomethoderror throws in 1.8

沒有採納的feature:

* module#method_defined?可以接受第二個引數指明是否把父類的方法包括進來

* module#class_variable_defined?至少從1.8.6開始就有了

* 使用attr :foo=來定義attr_accessor

* 子類不再能訪問類變數

ruby 1.9 (1): 新語法

ruby 1.9 (2): 核心與物件...

ruby 類和模組

1 所有的類名必須以大寫字母開頭,self關鍵字表示定義的類 類例項 ruby view plain copy class point attr accessor x,y include enumerable def initialize x 0,y 0 x x y y end 這裡並沒有做型別檢查...

Ruby 1 9概要(3)類和模組

三 類和模組 1 module instance methods,private instance methods,public instance methods module這三個方法都將返回方法名 的symbol組成的陣列,而非過去的字串陣列。2 module const defined?con...

Ruby 類和物件

ruby是一種物件導向程式設計語言,具有物件導向的特性 封裝 抽象 繼承和多型性。在ruby中,類以關鍵字class開始,後面跟類名 應大寫 以end結束。例如 class customer end1.2 變數 ruby提供四種型別的變數 區域性變數 區域性變數是在方法中定義的變數。區域性變數在方法...