2014-06-28 14 views
21

Próbuję tylko ClojureScript, zaczynając od konwersji czegoś, co napisałem w Clojure na cljx.Czy można użyć: refer: all in a ClojureScript: require?

Gdy próbuję go skompilować uzyskać:

clojure.lang.ExceptionInfo: :refer must be followed by a sequence of symbols in :require 

jestem znalezieniem niektóre odniesienia skośne online, ale nigdzie tam, gdzie jest napisane, czy byłbym w stanie używać :refer :all w programie ClojureScript.

Jeśli nie mogę tego zrobić, jaki jest powód tego ograniczenia?

+1

@dsm To jest pytanie o ClojureScript i jego różnice od Clojure. To tylko wydaje się być pytaniem Clojure. – interstar

+0

Wystarczająco fair. Wycofałem swój głos na zakończenie – dsm

Odpowiedz

29

Nie, celowo nie jest możliwe. Na liście mailingowej ClojureScript znajdował się conversation związany ostatnio z :refer :all i wygląda na to, że nigdy nie będzie obsługiwany.

Cytując David Nolen z tego wątku:

To tylko zły styl io ile wiem, tylko dlatego, że nie zmieniły się w Clojure jest fakt, że trzon zespołu jest bardzo nieugięty o zachowaniu tyłu kompatybilność, gdy to możliwe. Widoczny brak nagości: użycie w ClojureScript było celowe.

+0

Czy ktoś może wyjaśnić, dlaczego byłby to zły styl? Czy preferuje się mieć jedną dużą przestrzeń nazw zamiast dwóch, nawet jeśli widać naturalny podział między funkcjami niższego poziomu i wyeksportowanymi funkcjami wyższego poziomu? – user1011471

+2

Innym problemem z nagim: użycie lub "polecam: wszystko" jest to, że wprowadza statyczną separację faz. Jeśli wykonasz '(ns my-ns (: require foo.bar refer: all))' teraz, a następnie dodaj foo.bar/baz później, możesz skończyć z bazami już zdefiniowanymi w my-ns. Użycie "all" oznacza, że ​​trzeba umieć wyliczyć zamkniętą listę deklaracji w obszarze nazw lub ryzykowne, mylące, interaktywne i częściowe zachowanie rekompilacji. Jest to szczególnie problematyczne, jeśli masz makra. –

Powiązane problemy