如何完全限定var的值?

时间:2015-01-30 01:51:00

标签: clojure

想象一下:

(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的值?感谢。

2 个答案:

答案 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中被广泛使用。