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
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

