(map #(1) [ 1 3 5 7 ])
nie będzie działać z dwóch powodów:
#(1)
jest zero-argumentem anonimowa funkcja, więc nie będzie działać na mapie (która wymaga jednego argumentu funkcji w przypadku korzystania z jednego sekwencja wejściowa).
- Nawet gdyby miał odpowiedni arsenał, nie zadziałałby, ponieważ próbuje wywołać stałą 1 w funkcji takiej jak
(1)
- spróbuj (#(1))
, na przykład, jeśli chcesz zobaczyć ten błąd.
Oto kilka alternatyw, które będzie działać:
; use an anonymous function with one (ignored) argument
(map (fn [_] 1) [1 3 5 7])
; a hack with do that ignores the % argument
(map #(do % 1) [1 3 5 7])
; use a for list comprehension instead
(for [x [1 3 5 7]] 1)
; use constantly from clojure.core
(map (constantly 1) [1 3 5 7])
z powyższym uważam, że wersje używając constantly lub for powinny być preferowane - są bardziej przejrzyste i idiomatyczne.
Jeśli pojawi się błąd kompilatora, dobrze jest umieścić go w pytaniu, aby ludzie mogli łatwiej Ci pomóc. – mikera