Динамическая функция конструктора ключевых слов 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

Был бы признателен за понимание / объяснение того, почему этот конструктор ключевых слов возвращает разные результаты.

РЕПЛ Repl_screenshot

ПРИЛОЖЕНИЕ App_screenshot

Отредактировано - скриншоты

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"] 
  ...
Другие вопросы по тегам