我學習Clojure的,我想知道如何處理用Clojure OO類的子類。例如:一個主抽象類,兩個抽象子類(每個都重新定義了一些函數),在第三級中創建將在函數中使用的「對象」的最終子類。不知道如何做到這一點。但是,我設法用一個抽象類來完成一個子類,並使用defprotocol和defrecord。但是我不能在另一個內部實現一個協議。由於子類Clojure中
1
A
回答
6
你不需要類或子類。將您的數據表示爲具有屬性的地圖。 「子類」可能有更多的屬性。
如果您有關於屬性變化的函數,則既可以使用基於屬性的條件邏輯(如果,標準條件等),或者使用基於多方法或協議多態性,如果你真的需要。
在矩陣的話,沒有勺子。
+0
我真的需要研究多種方法中的一種。我一直在寫Clojure近半年,現在還沒有碰到它們。 – Carcigenicate
2
你可以繼承像這樣的協議:
(extend <subtype>
<protocol>
(merge (get-in <protocol> [:impls <basetype>])
<map-of-redefined-methods>))
多方法提供與derive
繼承的直接支持。
實際的Java子類關係可以用:extends
關鍵字指定爲gen-class
。不過,這僅僅意味着Java互操作。
一般情況下,它是值得一試,你是否真的需要繼承。它通常不是Clojure中建模的首選方法。
相關問題
- 1. Clojure子陣列
- 2. Clojure中的因子core.logic
- 3. Clojure中的類型系統
- 4. 在Clojure中導入Java類
- 5. Clojure依賴瓶子
- 6. Clojure內容類型?
- 7. Scala類的Clojure ISeq
- 8. clojure序列類型
- 9. Clojure中的原子文件替換
- 10. 如何在Clojure中做鉤子
- 11. 在clojure中導入lucene罐子
- 12. clojure中的慣用惰性原子
- 13. Clojure STM模糊因子
- 14. Clojure:阻止使用原子?
- 15. clojure:子集的排列?
- 16. Clojure交換!原子離隊
- 17. 在Clojure中擴展Dropwizard服務類
- 18. Clojure中提示類型的範圍?
- 19. 作出這樣的延伸類Clojure中
- 20. 將Java類導入到Clojure中
- 21. Clojure中的PGobject類型轉換
- 22. 從Clojure在Java class中導入Java類
- 23. 指定clojure中的對象類
- 24. 如何在Clojure中編寫以下類?
- 25. 如何在clojure/leiningen中需要java類
- 26. 未能在Clojure中定義一個類?
- 27. 在Clojure中實例化JavaFX類:SingleSelectionModel
- 28. 在Clojure中創建Java類的選項
- 29. 如何從Clojure中導出Java類(.jar)?
- 30. 檢查clojure中的東西類嗎?
創建一個協議作爲一個抽象基類,然後定義表示每個新的「層次」的協議。記錄可以實現多個協議,所以這應該起作用。 – Carcigenicate
也許是相關的:http://clojure.org/reference/multimethods(尤其是Clojure避開傳統OO方法的部分,但你可以通過不同的方式實現多態)。 –
@Carcigenicate的事情是,我需要記錄來實現一個協議,這將帶來它的基礎協議。例如:我有7類的順序: A-> B A->Ç 乙 - > d B->電子 C->˚F C-「G 而對於B和C,他們需要重新定義A – juanimoli