Динамическая функция конструктора ключевых слов Clojure возвращает неожиданные результаты
Когда я определяю свою функцию в репле, она работает как я ожидаю. Когда я помещаю его в пространство имен (т.е. мое приложение) и перезагружаю репл, я теряю namespace
компонент по ключевому слову. Я не уверен, что мне здесь не хватает.
;; Repl
(defn repl-keyword-gen [k str] (keyword (name k) str))
(repl-keyword-gen :test "example")
;;=> :test/example
;; App - example.core
(defn app-no-sym-keyword-gen [str] (keyword "test" str))
(defn app-with-sym-keyword-gen [k str] (keyword (name k) str))
(app-no-sym-keyword-gen "example")
;;=> :test/example
(app-with-sym-keyword-gen :test "example")
;;=> :example <----- Not sure about this one right here
Был бы признателен за понимание / объяснение того, почему этот конструктор ключевых слов возвращает разные результаты.
Отредактировано - скриншоты
1 ответ
Решение
Я думаю, что может быть проблема в вашей среде.
Я тестировал, используя обычный старый lein run
и получил ключевое слово namespace:
(ns clj.core
(:require
[tupelo.core :as t]
[clj-time.core :as tm]
))
(t/refer-tupelo)
;; App - example.core
(defn app-no-sym-keyword-gen [str] (keyword "test" str))
(defn app-with-sym-keyword-gen [k str] (keyword (name k) str))
(spyx (app-no-sym-keyword-gen "example"))
(spyx (app-with-sym-keyword-gen :test "example"))
(defn -main [& args]
(println "-main"))
Результаты:
~/clj > lein run
(app-no-sym-keyword-gen "example") => :test/example
(app-with-sym-keyword-gen :test "example") => :test/example
-main
Чтобы получить (spyx ...)
часть для работы, вам нужно это в вашем project.clj:
:dependencies [
[tupelo "0.9.9"]
...