请原谅我的无知,但是什么是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