Ruby的Metaprogramming
對一個程式新手來說,什麼是Metaprogramming? 一定非常疑惑.
而對Metaprogramming而言,Ruby是一個非常好的選擇.
但,但底什麼是Metaprogramming?
查字典,你查不到Metaprogramming. 於是將Meta和Programming分開查.
你查到了類似 "超越...之前" 和 "程式語言",但這看的懂才怪.
於是你又上wiki,英文看不懂看中文, 中文寫"元編程". 靠,這不是對岸的用詞嗎?
搞老半天你還是不懂,你想哭,想放棄了.
其實Meta programming就是在 程式碼中製造(產生)程式碼, 或說 用 code寫code.
相信大家都聽過物件導向,物件導向提倡的就是 模組化,繼承,等功能.
這些功能都只為了幾個目地 : 讓東西可以重覆使用. (個人認為還有好管理,因為將功能模組化了)
這樣一來,你便不需要一而再再而三的重覆編寫已有的功能.
但人們是懶惰的,於是讓"程式碼自動產生",連寫都不想寫的想法產生,這就是Meta programming.
以Ruby而言,簡單的範例如下 :
class Dog attr :leg,true end Tom=Dog.new Tom.leg #=>nil Tom.leg=4 #=>4 Tom.leg #=>4
讓我們先再看另一個範例
class Dog
end
%w(Won Wonwon Au Uuuu).each do |name|
Dog.class_eval <<-HERE
def #{name}()
p 'Dog bark: #{name.upcase}!'
end
HERE
end
Tom = Dog.new
Tom.Won
Tom.Wonwon
Tom.Au
Tom.Uuuu
第二個範例的顯示是Dog bark: WON! ....以此類推.
第一二個範例都顯示了只以簡單的幾行就建立出一些重覆性的函式.
第一個範例attr是內建的,當你attr,後面加true屬性,它會為你自動建立一個getter以及一個setter.
第二個範例則是以字串陣列的形式,將名稱傳入HERE文件,並透過eval將它實體化.
兩個範例應該很快的顯示了Ruby為何被稱為適合Metaprogramming了.
--延伸閱讀
關於Meta programming
Digging into Ruby Symbols
Seeing Metaclasses Clearly
An Exercise in Metaprogramming with Ruby - ' Metaprogramming Intro '
關於Eval
Evaluation Options in Ruby
Pages
Archives
Categories
Tags
Anand Rajaraman Aol Baidu Daymix geokit Git Google google map heroku Jeff Bezos jquery Kidglue kosmix linux Manolith meehive meta programming Mike Jone Msn news paper Nibbledish Rails RailsFun ror rss rss reader Ruby Ruby metaprogramming ruby string ruby symbol Search Engine smartgit string symbol Technology Time Warner trac TSAVO Twirlit ubuntu Venky Harinarayan wedding book Yahoo ym4r 婚禮Tech
- Another Ruby Quick Reference
- Ihower的Ruby站
- PLEAC-Ruby
- Rails Fun!
- Ruby On JAVAEYE
- Ruby on Windows
- Ruby regular expressions
- Sapphire Steel Ruby-Book
- Shoes Ruby GUI tools

