2009年11月9日

什麼是 metaprogramming?

剛剛在 JavaScript的中介編程與反射能力示範 讀到兩個 metaprogramming 的範例。
我覺得其中 foreach() 的例子怪怪的。

先來看看維基百科上對 metaprogramming 的定義:

Metaprogramming is the writing of computer programs that write or manipulate other programs (or themselves) as their data, ......

回過頭來看該篇文章所實作的 foreach()
它接受並調用一個函數(f)以及存取一個物件(this.props),但是並未產生或是修改到任何「程式」。
我不懂作者怎麼會拿它當作 metaprogramming 的例子。

不過文章中另外一個例子——accessor()——就是個很典型的 metaprogramming 範例。

2 則留言:

  1. 其實 foreach 在中介編程(metaprogramming)的領域是經典樣式。只是我上文的例子太精簡,以至於看不出它的威力。

    請看完整回覆。
    http://blog.roodo.com/rocksaying/archives/10637755.html

    回覆刪除
  2. @遊手好閒的石頭成

    感謝您的回覆。您花了很大的篇幅展示 foreach() 的威力,卻未能解開我原本的疑問。

    就我的理解,您實作的 foreach() 並未產生新的程式或是修改現有的程式,所以它應該沒有涉及 metaprogramming 的範疇。

    不知是我忽略了您的範例程式碼中的什麼細節或是我對 metaprogramming 的瞭解有誤?

    (本回應同步發表於您的回覆文章中)

    回覆刪除