作爲一個小愛好項目,我試圖建立自己的對象系統。我想知道是否有辦法將所有類的默認繼承從Object
更改爲我的基類Entity
,以便每當創建新類時,我都不必明確說明class Thing < Entity
;理想情況下,我只能說class Thing
並且其默認超類是我的Entity
類。你能改變Ruby中類的默認繼承嗎?
2
A
回答
6
當然你可以通過修改relevant part of the Ruby source和重新編譯的Ruby這樣做:
VALUE
rb_define_class_id(ID id, VALUE super)
{
VALUE klass;
if (!super) super = rb_cObject; // <-- where the default is set
klass = rb_class_new(super);
// ...
但是,這是一個巨大的麻煩,需要修補和運行定製的紅寶石,可能有很多陷阱和東西的是硬編碼爲假設Object
是默認值。
而且,最重要的是什麼?如果將Object
替換爲其他默認超類,則每個類(包括Ruby核心中的那些類)都將繼承此新的默認超類。只需更改Object
本身即可獲得相同效果(僅使用不同名稱),而無需自定義紅寶石。這是能夠重新開課的美麗!例如:
class Object
def foo
'bar!'
end
end
class A; end
A.new.foo #=> 'bar!'
如果你想成爲那種你甚至可能只是把一個Entity
模塊而不是類所有相關方法,然後include
成Object
。
0
不,不幸的是這在Ruby中不可行。 Ruby沒有像元對象協議那樣的例如CLOS,它允許你操作對象模型的核心語義。雖然這會很好!
相關問題
- 1. 你能改變默認的scale_x_datetime嗎?
- 2. Ruby和繼承類中的類變量
- 3. C#中的默認繼承類型
- 4. 你能改變SLURM的squeue命令的默認輸出嗎?
- 5. 具有默認參數的類繼承
- 6. 繼承logging.Formatter更改默認行爲logging.Formatter
- 7. Ruby,類變量和繼承?超類@@ var被改變了?
- 8. 你能用ruby改變導航鏈接的HTML類嗎
- 9. Doctrine2 + Symfony2的默認繼承
- 10. Python的默認繼承?
- 11. PHP - 繼承功能默認值
- 12. C++繼承功能默認操作
- 13. 骨幹類模型不繼承默認
- 14. 可以繼承Ruby全局變量嗎?
- 15. UML - 類繼承,你繼承了什麼?
- 16. Python中的繼承類變量修改
- 17. 改變繼承類的屬性類型
- 18. C++繼承不承認類
- 19. Ruby可繼承的類宏
- 20. Ruby中的繼承
- 21. 在.NET C#中:繼承控件Texbox,並更改默認的BackColor
- 22. 改變XML C#繼承的類名
- 23. Python的繼承改變屬性類型
- 24. 從類繼承的類沒有默認的構造函數
- 25. 你能繼承JavaScript中的私有函數嗎?
- 26. 你能解釋一下Nhibernate中的繼承嗎?
- 27. Ruby中的多重繼承...繼承自多個控制器類。
- 28. 的JavaScript繼承的屬性默認值
- 29. 從基類繼承函數聲明中參數的默認值
- 30. 父類中的Scala繼承默認參數
我沒有看到這樣做的任何一點。無論你計劃在Entity上實現什麼特性,都可以在Object中實現,或者在'Object'中擴展'''''',然後你就完成了。 – sawa