В Clojure, как я могу сделать свой собственный deftype многоразовым? - PullRequest
2 голосов
/ 03 января 2011

Я хочу создать defj clojure, который реализует Hashmaps Clojure. Я понимаю, что могу реализовать интерфейсы Clojure, чтобы сделать свой deftype Hashable и Sequable, но что мне нужно включить, чтобы мой deftype хорошо играл с Clojure STM, чтобы я мог делать:

(def a (ref (MyType.)))

и затем выполнять операции досинхронизации, такие как "против" и "против", безопасным способом STM?

Ответы [ 2 ]

2 голосов
/ 04 января 2011

Ваша проблема уже решена с помощью записей, которые вы описываете как тип / класс, но с такими интерфейсами, как Hashable и Sequable (и более).

Вы можете просто поместить свою запись в ссылку как любой другой hashmap. Не вижу здесь проблемы.

1 голос
/ 04 января 2011

(def a (ref MyType)) не имеет особого смысла, потому что вы помещаете класс MyType в ссылку.

Тип, который вы помещаете в ссылку, в идеале должен быть неизменным типом как тело dosync не должно иметь побочных эффектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...