【发布时间】:2017-12-14 11:44:29
【问题描述】:
我有这样的事情:
(def a "text")
(def b "text")
(def c nil)
(def d 8)
(def e "")
(def testlist (list a b c d e ))
现在,有什么方法可以获取变量名的字符串吗?我认为“否”是最有可能的答案。
name 似乎不起作用,因为它只返回值。该列表是否仅包含 def 之后的值?
编辑:我忘记了什么,这可能对这个问题很重要:我既不能使用 eval,也不能使用 defmacro,两者都是不允许的(出于安全等原因)。所以,是的……
【问题讨论】:
-
这是一个猜测:我不知道 clojure。但我怀疑你是按值创建列表,所以列表只包含值,而不是对变量的引用。
-
您可以构造一个符号列表:
(list 'a 'b 'c 'd 'e)或 vars:(list #'a #'b #'c #'d #'e)。 -
您确实需要一个宏来执行此操作,而且通常当人们想要执行此操作时,原因并不是很有说服力,而且几乎总是不是一个好主意。
-
@Josh 原因是,我想检查 nil 和空,然后输出这些变量的名称。想法是我不知道这个列表中有多少元素,只是检查每个元素都会返回结果。
-
@Kris 是的,我可以,我只是在寻找一种不这样做的懒惰方法。
标签: clojure