元編程並不是一個很新的概念,通常元編程被認為是通過程式來產生程式,如果從這種意義上來考慮,那麼lex和yacc以及JavaCC應該都可以算是具有了元編程的概念,在Java中,元編程得到了廣泛的應用。但在Ruby中,元編程的使用變得相當的簡單和容易實現,使用Ruby語言本身來產生Ruby代碼,不需要藉助外部的工具,著名的RoR架構就是建立在Ruby元編程的基礎上的。可能你對元編程還沒什麼概念,但是Ruby已經內建了元編程這種機制,所以很有可能,你在不知不覺中就已經使用了Ruby元編程技術為你帶來的方便之處。如下面這段代碼:
class Person
attr_reader :name
end
你肯定知道:name是和@name相關聯的,但是你不一定清楚它到底是怎麼實現的,其實attr_reader方法的實現就是採用了元編程技術,如下面的這段代碼:
class Module
def attr_reader(*syms)
syms.each do |sym|
class_eval %{def #{sym}
@#{sym}
end
end
end
end
看了這段代碼,你應該大概瞭解元編程的機制了吧,如果你現在還不瞭解,那麼我建議你先認真的學習一下Ruby的反射機制,然後再接下去看這篇文章,因為下面介紹的內容並不是一杯嬰兒奶粉。
在Ruby On Rails中,有一個OR映射層,就是動態從一張關係表映射到一個對象,這主要由ActiveRecord類來實現。在OR映射模型中,將關聯式資料庫中的關係表映射到物件模型時,將關係表的表名映射到類名,表中的每一個元組映射到對應於這個類的一個對象,元組的一個欄位對應於對象的一個屬性。
假如我們有一個儲存職員基本資料的檔案,檔案的格式是這樣的:第一行是檔案內容的每個欄位的名稱,從第二行開始,則是每個職員的基本資料。現在我們有一個檔案名稱為“employee.txt”的檔案,其內容如下所示:
name,age,gender
"John", 23, "male"
"Linclon", 25, "male"