프로토콜을 기존 유형에서 "상속"하는 새 레코드를 정의하려면 어떻게해야합니까?프로토콜 방식을 기존 유형으로 전달하는 방법은 무엇입니까?
이 질문을 명확하게하기 위해 Ubergraph을 확장하여 설명 하겠지만 Ubergraph는 단지 예일뿐입니다. Ubergraph에서 작동하는 솔루션이 아니라 일반적인 솔루션을 찾고 있습니다. Ubergraph에 글로벌 속성 인 graph-name
을 추가하고 싶다고 가정 해 보겠습니다. 이상적으로, 나는 이런 식으로 뭔가를 할 수 :
(defrecord named-ubergraph [g graph-name])
(extend-type named-ubergraph
(all-the-protocols-supported-by ubergraph.core.Ubergraph)
(call-the-same-functions-replacing-first-argument-with '(this g))
나는 Ubergraph 소스 코드를보고 수동으로 모든 전송 기능을 쓸 수 물론
하지만 as you can see here, Ubergraph 만족 많은 프로토콜과 많은 프로토콜 방법.
너무 많은 상용구 코드를 작성하면 Clojurely 소리가 나지 않으며, 내가하고 싶은 일은 우거버 그래프에 1 비트의 데이터를 추가하는 것입니다. 더 좋은 방법이 있니?
내가 잘못 생각하는 경우 언제든지 질문을 재 개념화하십시오.
레코드에 'assoc'-ing하는 것은 좋은 통찰력입니다! 나는 Clojure가 이것을 허용했다는 것을 알았지 만, 나는이 문제와 관련하여 그것을 생각하지 않았다. 이제는 이상적인 코드의 양으로 즉각적인 해결로 많은 문제점을 해결할 수 있습니다 : none! 그러나 Ubergraph에'assoc'-ing을 시도했지만 작동하지 않습니다. 그래서 지금 질문을 공개하고 있습니다. (Ubergraph에 임의의 데이터를 추가하는 것은 사실 현재 실제로 필요한 주요 실용적인 이유입니다.) –
음, Ubergraph도 [case statements] (https://github.com/Engelberg/ubergraph/blob/320e284a6de6adb241df5dfeb9fd6383caea659c/src/)를 가지고 있습니다. ubergraph/core.clj # L214)을 사용하면 임의의 키에 대해 'assoc'을 방지 할 수 있습니다. –