2014-02-18 2 views
3

сценарий: я хочу использовать мультиметоды для отправки и распространения функций в нескольких файлах. один из файлов содержит только мультиметоды, и чтобы сделать их пригодными для использования, я должен вручную загрузить файл. есть ли способ автоматически загрузить файл, а не явно загружать его?Загрузка только файла с несколькими методами

вот простой пример того, что я делаю: метод

; app/core.clj 
(ns app.core 
    (:use [app.fruit.core :only [make-fruit]]) 
(println (:name (make-fruit :banana))) 

; app/fruit/core.clj 
(ns app.fruit.core) 
(defmulti make-fruit identity) 

; app/fruit/banana.clj 
(ns app.fruit.banana 
    (:use [app.fruit.core :only [make-fruit]]) 
(defmethod make-fruit :banana [fruit] 
    {:name "banana" :color "yellow}) 

fruit.banana в не загружаются, если я явно не загружать его в app.core, как добавить его в: использование группы. это, кажется, преследует цель использования мультиметода, так как я все же должен быть явным в отношении всех методов его реализации.

+0

Если пространство имен с подстановочными знаками было разрешено, это было бы тривиально. Следуйте за этой веткой http://stackoverflow.com/q/1990714/1552130 – KobbyPemson

ответ

0

Вам не обязательно быть явным, если вы не хотите быть. Методы будут работать, если они будут загружены в другой точке чем-то другим. Если я хочу добавить метод к make-fruit, то мне придется загрузить этот метод самостоятельно. В этот момент любой код, который вызывает make-fruit, будет знать о моем новом методе.

+0

, я думаю, я так много понимаю, но моя проблема в том, что ничего не загружается в файл; он состоит только из многотодовых реализаций. поэтому в какой-то момент я должен явно загрузить его только для того, чтобы методы стали доступными. если это невозможно избежать, я могу рассмотреть возможность использования функций, таких как make-banana, вместо общей формы, если я должен быть явным в любом случае. – xen

0

Что вы могли бы попробовать это в нижней части приложения/фрукты/core.clj:

(load "banana") 
; Add other fruits here. 

Чтобы сделать его более гибким, вы можете, конечно, перечислить все файлы, хотя, к сожалению, clojure.core/root-directory является частным.

Смежные вопросы