標籤:ruby 類 對象 變數
7、類Class
(1)initialize 方法 ,initialize是一個特殊方法,預設為私人,在調用new建立一個 新對象時,Ruby首先分配一些記憶體來儲存未初始化的對象,然後調用對象的 initialize方法,
(2)inspect方法 預設將對象的ID和執行個體變數格式化
(3)Ruby的類永遠都不是封閉的,意味著可以向一個已有的類中添加方法,包括內 建類
(4)Ruby的類允許繼承,如class Child < Parent
(5)繼承與Mixins Ruby支援單繼承,但可以從任何數量的mixin中引入功能,這 提供了可控的、類似於多繼承的能力。
(6)方便快捷的定義屬性的存取方法,如:
class Song
attr_reader :name, :artist, :duration
end
類似的方法有:attr_writer 寫屬性
(7)虛擬屬性 使用屬性建立方法建立虛擬執行個體變數,對外部就像其他屬性一樣,但 內部卻沒有對應的執行個體變數,如:
class Song
def duration_in_minutes
@duration/60.0
end
def duration_in_minutes=(value)
@duration=(value*60).to_i
end
(8)類變數 類似於C++中的類靜態變數,由兩個@開頭,如:@@count
(9)類方法 類似於C++中的類靜態函數,定義類方法的方式還有
class Demo
def Demo.meth1
…
end
def self.meth2
…
end
class << self
def meth3
…
end
end
end
8、Singleton模式
class MyLogger
private_class_method :new
@@logger = nil
def MyLogger.create
@@logger = new unless @@logger
@@logger
end
end
注釋:private_class_method 將類方法聲明為私人;
9、變數不是對象,而是對象的引用:
person1 = “Tim”;person2=person1
person1[0]=”J”
person2
將person1賦值給person2不會建立任何新對象;它只是將person1的對象引用拷貝給 person2,因此person1和person2都指向同一個對象。賦值別名對象,潛在地給你引用 同一對象的多個變數,可以通過String的dup方法來避免。
person2 = person1.dup
10、可以通過凍結一個對象來阻止他人對其進行修改, 如 person1.freeze
ruby 類、對象、變數