많은 프로토콜 대 multimethods 비교가 있지만 더 높은 순서 함수를 사용하지 않는 이유는 무엇입니까? 예를 들어 보겠습니다. 데이터가 있습니다 (예 : 레코드). 그리고 우리는 및 을 직렬화하여을 직렬화합니다. 파일, json 및 데이터베이스에 저장하려고한다고 가정 해보십시오. 우리는 프로토콜이 SerializationMethod 및 데이터베이스라는 기록, JSON, 파일을 구현라는 만들어야합니까? 그것은 프로토콜을 사용하기 위해서만 레코드를 만드는 해킹 같은 것 같습니다. 두 번째 해결책 - 다중 메소드 - 직렬화 출력으로 문자열 매개 변수를 취하여이를 수행하는 방법을 결정할 수 있습니다. 하지만 그게 올바른 방향인지 확신 할 수 없습니다. 세 번째 방법은 을 작성하여을 직렬화 한 다음 데이터와 직렬화 함수를 전달합니다. 하지만 지금은 직렬화와 같은 이름 (예 : FO JSON)과 방법을 역 직렬화 이름을 수 없습니다 어떻게 I (또는 어떻게해야) 이렇게Clojure : 프로토콜과 vs 프로토콜의 상위 순서 함수
(defn serialize [method data]
(method data))
(defn json[data]
(...))
질문입니다. 더 높은 차수 기능을 가진 일반적인 방법이 있습니까? 아니면 뭔가 잘 이해하지 못했을까요? 그건 내 첫 clojure 단계이므로 용납하시기 바랍니다.
데이터베이스/파일에 대한 차별 json 및 writting에 대해서는 전적으로 동의합니다. 그러나 레코드가있는 솔루션은 필드가없는 레코드를 만드는 것입니다. 이는 저에게 해킹입니다. 그리고 데이터를 직렬화하고자 할 때마다 레코드의 인스턴스 (.serialize -> JSONSerializer 데이터)를 만들어야합니다. HOF에 관해서 내가 의미하는 바는 : (JsonSerialization 데이터를 직렬화). deserialization의 serialization : (FransianSerialization을 직렬화 (JsonDeserialization 데이터를 deserialize)) 또는 arrow makro를 사용합니다. – ravenwing
예를 들어 필드를 두었습니다. e가 들어있는 필드가있는 좋은 이유가 있습니다. 지. 구성 매개 변수. SerializationMethod 프로토콜의 메소드를 호출 할 때마다 JSONSerializer를 작성할 필요가 없습니다.올바르게 구현 된 경우 다른 스레드에서 스레드를 안전하게 구현하면 한 레코드의 메서드를 여러 번 호출 할 수 있습니다. 주석의 HOF 예제에는 전달 된 함수 (???)가 포함되지 않습니다. –
JsonSerialization도 FressianSerialization의 함수입니다. 하지만 지금은 솔루션이 얼마나 어리석은지 알 수 있습니다. 솔루션을 호출하는 것도 가치가 없습니다. – ravenwing