(1)類是乙個增強的模組,所以所有類定義中的特性都同樣適用於模組定義。
(2)ruby程式中總是存在乙個當前物件:self,類似地,也總有乙個當前類或模組存在,當定義乙個方法時,該方法將成為當前類的乙個例項方法。
(3)當通過class關鍵字開啟乙個類時,這個類就成為當前類。
(4)module#class_eval()方法(module_eval())方法可以在不知道類名的情況下開啟乙個類,例: ?
12
3
4
5
6
7
def
add_method_to(a_class)
a_class.class_eval
do
def
m
'hello'
end
end
end
(5)類變數是以@@開頭的變數,類變數與類例項變數不同,它們可以被子類或者類的例項所使用
(6)單件方法,可以給當個物件新增方法,例:
?
1
2
3
4
5
6
7
str =
"just a regular string"
def
str.title?
self
.upcase ==
self
end
str.title?
#=>false
str.methods.grep(/title?/)
#=>["title?"]
str.singleton_methods
#=>["title?"]
(7)類方法的實質就是:它們是乙個類的單件方法
(8)module#attr_reader()、attr_writer()、attr_accessor()可以用於生成讀、寫、兩者都生成
(9)eigenclass,獲取乙個eigenclass:
?
1
2
3
4
5
obj = obejct.
new
eigenclass =
class
<
self
end
eigenclass.
class
#class
(10)eigenclass只有乙個例項並且不能改被繼承
(11)到呼叫乙個物件呼叫單件方法時,如果物件有eigenclass,先去eigenclass找,再向上找父類
(12)alias :new_name :old_name 可以用來給方法取別名。alias是個關鍵字,和他類似的還有乙個module#alias_method方法
(13)環繞別名:
(1)給方法定義乙個別名
(2)重定義這個方法
(3)在新的方法中呼叫老的方法
(14)加上eigenclass後的類關係圖:
由於圖已經比較亂了,class類的class箭頭沒有給出,class.class #=> class
從上圖,可以看出很多的規律:
元程式設計 類定義
注意 類也是物件 當前類 頂層的類為object,若在此定義方法則為object的例項方法 class myclass class 開啟的myclass 即為當前類 def my method myclass為當前類 endendclass eval 方法 class 限制 需要知道類名 class...
Ruby 元程式設計
ruby 語言在抽象層面有了元程式設計支援,功能相當強大,如果業務模型有很大的相似性,相信元程式設計會讓你節省大量 舉乙個小例如下,這裡只是使用了乙個class eval 還有instance eval,module eval,function.parameters等大量方法可以呼叫 那麼可以設計如...
Ruby元程式設計學習
1.ruby元程式設計的含義 ruby中的元程式設計,是可以在執行時動態的操作語言結構 如類 模組 例項變數等 的技術。你甚至可以在不用重啟的的情況下,在執行時直接鍵入一段新的ruby 並執行他。ruby的元程式設計,也具有 利用 來編寫 的作用,例如,常見的attr accesstor等方法就是如...