如何完全限定 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
想象一下:
(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