Установка свойства проекта в нелитеральную строку, по-видимому, не работает в Лейнингене

#clojure #leiningen

#clojure #leiningen

Вопрос:

Возьмите простой файл проекта:

(defproject sample-clojure-cloudbees «1.0.0-SNAPSHOT»: описание «Образец приложения clojure — clojure 1.3!» : бла «привет»)

Когда я читаю (get project: blah), я получаю возвращенную строку «привет» — как и ожидалось.

Если я заменю «привет»

: бла (выплюнуть «какой-то файл …»)

Я получаю сообщение об ошибке, вызванное: java.lang.ClassCastException: clojure.lang.PersistentList не может быть приведен к java.lang.Строка

Похоже, что он не оценивает вещи так, как я ожидаю, есть идеи?

Комментарии:

1. Я не совсем уверен, что вы пытаетесь здесь сделать, вот defproject источник, может быть, это поможет? clojuredocs.org/leiningen/leiningen.core/defproject

Ответ №1:

defproject — это макрос, который он не будет оценивать (slurp …), Если вы не укажете ему,

замена,

 :blah (slurp "some file...")
  

с,

 :blah ~(slurp "some file...")
  

предоставит вам содержимое файла.

Комментарии:

1. О, фантастика. Я думал, что это что-то вроде этого. Я запишу это как урок, который я не забуду 😉 Как ни странно, я почти уверен, что видел, как это работало в прошлом — думаю, я, вероятно, не ожидал, что это будет строка, и просто не увидел ошибки, как в этом случае, когда я начал ее использовать.