singleton classes, Domain Specific Languages, dynamic class generation, using method_missing, method dispatching using patterns, method replacement, null object refactoring, eval, instance variable introspection, procs and blocks, and eval bindings.
随便弯腰捡起来几个, 就是宝贝
http://ola-bini.blogspot.com/2006/09/ruby-metaprogramming-techniques.html
Metaprogramming最正宗的解释就是维基百科的学术化解答:
http://en.wikipedia.org/wiki/Metaprogramming_(programming)
但是PogaPress的简单化理解并不庸俗-metaprogramming 或著叫做中介編程
引用
簡單的說呢 就是寫一個程式讓他自己會去寫程式。
什麼意思呢? 請看下面的例子:
....
看出來了嗎? eval這個函式接受了一個字串,並且叫ruby把這個字串當做一段程式碼來編譯。
也達到了metaprogramming的意義 動態的產生程式。
什麼意思呢? 請看下面的例子:
....
看出來了嗎? eval這個函式接受了一個字串,並且叫ruby把這個字串當做一段程式碼來編譯。
也達到了metaprogramming的意義 動態的產生程式。
http://poga.wordpress.com/2006/06/19/ruby%e7%9a%84eval%e5%87%bd%e5%bc%8f-%e6%9c%80%e7%b0%a1%e5%96%ae%e7%9a%84metaprogramming/
contagious也來講一下 Ruby 的 Meta programming 了..
引用
Metaprogramming 就是去 programing 你的 programing。
把你的 programming Language 特化成專門對你要處理的 Domain 的語言
( Domain Specifi Language),然後再用這種語言去處理你的問題。
最簡單的 Metaprogramming in Ruby,就是 attr_reader, attr_writer, attr_accessor。
在 Ruby 裡所有的 instance variable 都是必須用 getter 和 setter 來存取。attr_xxxx 就是用來生成這些 getter 和 setter 的。
把你的 programming Language 特化成專門對你要處理的 Domain 的語言
( Domain Specifi Language),然後再用這種語言去處理你的問題。
最簡單的 Metaprogramming in Ruby,就是 attr_reader, attr_writer, attr_accessor。
在 Ruby 裡所有的 instance variable 都是必須用 getter 和 setter 來存取。attr_xxxx 就是用來生成這些 getter 和 setter 的。
http://www.javaworld.com.tw/jute/post/view?bid=14&id=146712&sty=3
基于Ruby的元编程技术
http://www.rubychina.org/viewthread.php?tid=124&extra=page%3D1
基于Ruby的元编程技术(附源代码)
http://www.rubychina.org/viewthread.php?tid=125&extra=page%3D1
Java 技术之外的轻量级开发
Bruce Tate 比较了java和ruby在元编程上的优劣:
http://doc.zoomquiet.org/data/20051109094030/
引用
元编程(Metaprogramming),即写程序的程序,是一个功能强大的概念。您已经看过 Java 语言的两个例子:
* 在 Hibernate 中,元编程以字节码增强和反射机制来给对象增加持久性,而不迫使您写 SQL 查询。
* 在 Spring 中,元编程允许给传统的 Java 对象(POJO)增加服务,而不会使它们变得凌乱。
事实上,Java 社区花费越来越多的时间在元编程上面,力求提供更好的服务透明性,但对元编程来说,Java 编程语言并不是一种特别好的语言。在其他语言中,元编程甚至更加重要。在 Ruby on Rails 框架成长的背后,Ruby 提供了爆炸性的力量。Rails 的革新已经横扫了这个产业,因为元编程允许框架用户通过非常少的工作建立令人难以置信的功能。该框架使用命名惯例、智能缺省和元编程来找到一个关系数据库表格的内容,然后动态地建立一个模型,在这个模型中对每个数据库列都有一个属性。这个过程发生在运行时,因此数据库模式的更改能够在用户界面得到反映,如果您希望如此的话。
如同在 Java 语言中一样,您可以找到元编程框架来处理持久性、事务和 XML。事实上,如您所见,在本系列的前三篇中,越来越多的 Java 开发人员在寻找提供更好的透明性的工具。当然,为了这样做,编码人员必须在 Java 的本来目的之外伸展 Java 语言。为了得到更好的透明性,需要使用一些技术,比如代码生成、字节码增强、代理、拦截器、反射和面向方面的编程(AQP)。当创建更加复杂的企业级应用程序时,像 Spring、Hibernate、JBoss 应用程序服务器和 HiveMind 之类的框架越来越多地使用这些技术来提供更好的透明性。
通过提供更好的反射和类的开放结构,Lisp、Python、Ruby 和 Smalltalk 等语言都使透明性的实现更加容易。让我们看看 Ruby 的两个例子。
Wikipedia对Meta的解释:
Meta (Greek: μετά = "after", "about," "beyond"), 是希腊语,英文中常用的
前缀, used to indicate a concept which is an abstraction from another concept, used to analyze the latter.
For example 形而上学 "metaphysics" refers to things beyond physics, and "meta language" 元语言
refers to a type of language or system which describes language.