Clojure clojure.string/split хит java.lang.ClassCastException: clojure.lang.LazySeq не может быть приведен к java.lang.CharSequence
Я попытался написать функцию для обработки строки строки, вызвав str\split, функция работает нормально, если я вызываю ее непосредственно в окне LEIN REPL, но при попытке запустить программу из LEIN RUN произойдет ошибка вышеупомянутого вызова. Любое предложение?
(let [num-letters (count (apply str line))
num-spaces-needed (- column-length num-letters)
num-words (count (clojure.string/split line #"\s"))
num-space-in-group (if (= 1 num-words) num-spaces-needed (/ num-spaces-needed (- num-words 1)))
group-of-spaces (repeat num-space-in-group " ")
padding (create-list-spaces num-spaces-needed (dec (count line)))]
( clojure.string/join "" (if (empty? padding) (cons line group-of-spaces)
(cons (first line) (interleave (rest line) padding)))))
1 ответ
Я полагаю, вы проходите line
в качестве параметра для вашей функции, хотя он был опущен в вашем фрагменте кода.
Вы должны проверить различия в line
параметр, при вызове функции из этих двух разных точек входа. Во-первых, давайте назовем вашу функцию как tokenize
для удобства. Теперь ваниль app
шаблон в Лейнингене создает -main
это выглядит примерно так, после того как я добавлю tokenize
вызов:
(defn -main
[& args]
(tokenize args))
Аргументы деструктурированы с помощью оператора rest &
, который строит последовательность аргументов (args
). Таким образом, при запуске этого с lein run I want this to work!
в итоге вы вызываете tokenize
функция с последовательностью. clojure.string/split
не может быть применен к последовательности, и вы получите трассировку стека.
Тем не менее, когда вы вызываете свою функцию из lein repl
естественный способ сделать это с помощью заклинания, как (tokenize "Iä! Iä! Cthulhu fhtang!")
, Это будет работать, так как ваш параметр вызова теперь просто строка, а не последовательность.
В конце концов, все сводится к тому, как вы вызываете свою функцию. Более уверенный ответ потребует подробностей об этом, как прокомментировал @sam-estep.