請原諒我的無知,但是什麼是Metaobject協議,Ruby有沒有?如果沒有,是否有可能爲Ruby實現一個?如果Ruby有一個功能,Metaobject協議可能具備哪些功能?Ruby是否具有Metaobject協議?如果不是,是否可以實現?
回答
什麼是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。
感謝您的信息,然而閱讀第一個鏈接「重建內建類......」看起來作者確實獲得了大量的他的Ruby評論是錯誤的,這破壞了他的觀點。大多數他聲稱在Ruby中難以或不可能完成的事情在Ruby中非常容易實現。我很想看到由精通Ruby和Perl的人編寫的類似性質的文章:)謝謝! – horseyguy 2010-11-01 20:54:36
如果你看起來更接近定義,你會發現Ruby 的確有一個MOP。它是否像CLOS中的那個?不,CLOS是元圓形澳門幣這是偉大的(我甚至說天才),但它不是一個真正的方式,看看Smalltalk。要實現(比方說基本)MOP所有你需要的是提供的功能,讓您的運行時:
- 創建或刪除一個新的類
- 創建一個新的屬性或方法
- 原因一類繼承不同的類(「更改類結構」)
- 生成或更改定義類方法的代碼。
而Ruby提供了一種方法來完成所有這些。
附註:Class :: MOP的作者是正確的(恕我直言),當它聲稱你可以用元圓形MOP做的一些事情在Ruby中很難做到(免責聲明:我有零,zilch,nada Perl的知識,所以我正在考慮像MOP這樣的Smalltalk與像MOP這樣的CLOS),但其中大多數都非常具體(我正在考慮metaclass instantation),並且有辦法讓它們在沒有它的情況下工作。我認爲這一切都取決於你的觀點,元圓形MOP更酷,但在學術方面更多,非元圓形MOP更實用,更易於實施。
- 1. 如何檢查協議是否實現?
- 2. 是否可以在Objective-C中動態實現協議?
- 3. 檢查URL是否有協議,如果不是,則添加
- 4. 是否可以繼承UiApplicationDelegate協議?
- 5. 協議是否可能具有靜態工廠方法的默認實現?
- 6. 是基於現有協議的協議還是協議?
- 7. URI是否包含協議?
- 8. 如果我們不使用PrototypeJs,是否可以實現Comet?
- 9. 在Swift中,類型(不是實例)是否符合協議?
- 10. 是否有HSqlDB的Ruby實現?
- 11. Ruby中是否有包實現?
- 12. 如何檢查記錄是否實現了特定的協議?
- 13. iPhone - 如何知道協議方法是否已實現?
- 14. 是否有社交網絡協議
- 15. 是否有可能在類協議上創建willSet的默認實現
- 16. 是否可以僅使用LISP基元來實現協程?
- 17. 符合協議時,XCode是否能夠實現Code Sense?
- 18. Safari是否爲web套接字實現了最新的協議?
- 19. 是否需要在郵件服務器中實現POP3協議?
- 20. 檢查一個類型是否實現協議
- 21. 是否可以使用FQL實現friends.getMutualFriends?
- 22. 是否可以在Phonegap中實現Tesseract?
- 23. 是否可以實現自己的IASKSettingsReader?
- 24. 是否可以在C#中實現mixin?
- 25. 是否可以實現__super宏?
- 26. 是否可以在ListView中實現ItemTemplate?
- 27. 是否可以用css實現斜邊?
- 28. Can Services是否可以實現SensorEventListener
- 29. Groovy中的Metaobject協議(MOP)
- 30. 是否有可能查詢github api的用戶是否是協作者的任何回購協議?
對此有幫助嗎? http://stackoverflow.com/questions/1061908/scoping-of-open-classes-in-ruby-versus-mop-in-groovy – zengr 2010-10-31 09:15:13
你從哪裏聽到「Metaobject」這個詞? – 2010-10-31 23:13:59
@Andrew,CLOS:http://www.lisp.org/mop/concepts.html – horseyguy 2010-10-31 23:41:38