2010-10-31 104 views
5

請原諒我的無知,但是什麼是Metaobject協議,Ruby有沒有?如果沒有,是否有可能爲Ruby實現一個?如果Ruby有一個功能,Metaobject協議可能具備哪些功能?Ruby是否具有Metaobject協議?如果不是,是否可以實現?

+0

對此有幫助嗎? http://stackoverflow.com/questions/1061908/scoping-of-open-classes-in-ruby-versus-mop-in-groovy – zengr 2010-10-31 09:15:13

+0

你從哪裏聽到「Metaobject」這個詞? – 2010-10-31 23:13:59

+1

@Andrew,CLOS:http://www.lisp.org/mop/concepts.html – horseyguy 2010-10-31 23:41:38

回答

1

什麼是Metaobject協議?

最佳描述我已經遇到是從Class::MOP文檔:

甲元對象協議是爲一個對象系統的API。

更具體地說,它抽象了對象系統的組件(類,對象,方法,對象屬性等)。這些抽象可以用來檢查和操縱他們描述的對象系統。

可以說任何對象系統都有兩個MOP;隱式MOP和顯式MOP。隱式MOP處理諸如方法分派或繼承之類的事情,這些事情是對象系統工作的一部分自動發生的。顯式的MOP通常處理對象系統的內省/反射特徵。

所有對象系統都有隱式MOP。沒有人,他們不會工作。顯式的MOP更不常見,並且取決於語言可以從限制性(Java或C#中的Reflection)到全開(CLOS是一個很好的示例)。


紅寶石是否有一個?

根據這個線程Reopening builtin classes, redefining builtin functions?Perlmonks文章中,我想答案是沒有(至少在一個MOP就是嚴格意義上的)。

顯然這裏有一些蠕動的空間,所以它可能值得在SO的Perl端發佈一個問題,因爲Class::MOP/Moose作者確實回答questions there

+2

感謝您的信息,然而閱讀第一個鏈接「重建內建類......」看起來作者確實獲得了大量的他的Ruby評論是錯誤的,這破壞了他的觀點。大多數他聲稱在Ruby中難以或不可能完成的事情在Ruby中非常容易實現。我很想看到由精通Ruby和Perl的人編寫的類似性質的文章:)謝謝! – horseyguy 2010-11-01 20:54:36

0

如果你看起來更接近定義,你會發現Ruby 的確有一個MOP。它是否像CLOS中的那個?不,CLOS是元圓形澳門幣這是偉大的(我甚至說天才),但它不是一個真正的方式,看看Smalltalk。要實現(比方說基本)MOP所有你需要的是提供的功能,讓您的運行時:

  1. 創建或刪除一個新的類
  2. 創建一個新的屬性或方法
  3. 原因一類繼承不同的類(「更改類結構」)
  4. 生成或更改定義類方法的代碼。

而Ruby提供了一種方法來完成所有這些。

附註:Class :: MOP的作者是正確的(恕我直言),當它聲稱你可以用元圓形MOP做的一些事情在Ruby中很難做到(免責聲明:我有零,zilch,nada Perl的知識,所以我正在考慮像MOP這樣的Smalltalk與像MOP這樣的CLOS),但其中大多數都非常具體(我正在考慮metaclass instantation),並且有辦法讓它們在沒有它的情況下工作。我認爲這一切都取決於你的觀點,元圓形MOP更酷,但在學術方面更多,非元圓形MOP更實用,更易於實施。

相關問題