LINUX.ORG.RU

Мультиметоды и типы.

 


0

2

Решил вот тут использовать алгоритм, анализ в котором основан на типе определения, в языке с динамической типизацией и неявным приведением онных.
А именно есть мультиметод принимающий х. Если х мапа, вектор или список, то вызывается один метод. Если х попадает под определение :default, то возвращаем х как есть.
Все вроде бы хорошо на примерах с последовательностями небольшого размера, а вот с чем-то большим кложа заботливо переводит PersistentArrayMap в PersistentHaspMap в целях производительности. Да, я прописал class как функцию выбора метода.
Как это сделать полюдски?

Как вариант - не завязываться на определения типов в платформе, а сделать селектор в мультиметоде a-la (cond (map? x) :a (vector? x) :b ...etc)

из плюсов - будет работать не только на clojure/jvm, но и на каком-нить clojurescript.

anonymous
()
Ответ на: комментарий от anonymous

Сам по себе defmulti вынесен в другой модуль и ипользуется в ряде тамошних функций. Модуль планируется многократно использовать с разными методами в разных областях видимости. Т.е. просто

(ns foo
  (:use x-module))

(defmethod ...
...
(defmethod...

(function-from-x-module ;; Внутри неё будет использоваться сам мультиметод.
Здесь cond - решение убивающее идею. Как бы это derive'ом или чем-нибудь подобным обойти.

proofit404
() автор топика
Ответ на: комментарий от anonymous

Опять я кодить взялся, не глядя на весь фичсэт языка...

proofit404
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.