如何完全限定 var 的值?

How to fully qualify a var's value?

想象一下:

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

由于符号是从字符串创建的(请参阅 here)并且它们是不可变的,因此为了从符号构建完全限定的符号,转换为字符串是不可避免的。

(symbol (name (ns-name *ns*)) (name 'my-symbol))

关键字也可以完全限定。值 ::my-keyword 将被 reader 扩展为完全限定,采用读取值的命名空间。

::my-keyword
;;= :user/my-keyword
(ns other-ns)
::my-keyword
;;= :other-ns/my-keyword

当您需要完全限定值时,它们在 Clojure 中的使用更为广泛。

使用反引号代替直引号:

(def my-var `my-symbol) ; and not 'my-symbol