想象一下:
(def my-var 'my-symbol) ;; Please note that it must be 'my-symbol not `my-symbol
my-var ;; => my-symbol
但我想要
;; => fully-qualified/my-symbol
除了将值转换为字符串之外,是否可以完全限定my-var的值?感谢。
答案 0 :(得分:5)
使用后引号而不是直引号:
(def my-var `my-symbol) ; and not 'my-symbol
答案 1 :(得分:1)
由于符号是从字符串创建的(参见here)并且它们是不可变的,因此为了从符号构建完全限定的符号,转换为String是不可避免的。
(symbol (name (ns-name *ns*)) (name 'my-symbol))
关键字也可以完全合格。读者将扩展值::my-keyword
以完全限定,将名称空间放在读取值的位置。
::my-keyword
;;= :user/my-keyword
(ns other-ns)
::my-keyword
;;= :other-ns/my-keyword
当您需要完全合格的值时,它们在Clojure中被广泛使用。