基於Ruby的元編程技術

來源:互聯網
上載者:User

元編程並不是一個很新的概念,通常元編程被認為是通過程式來產生程式,如果從這種意義上來考慮,那麼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"

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.