我需要定义相互依赖的变量。我的意思是一个 var 包含例如一个带有另一个 var 的向量,反之亦然。以下代码说明了这一点:
(declare a b)
(def a [1 b])
(def b [a 2])
但是在加载这段代码后我得到了这个:
test=> (first a)
1
test=> (second a)
#<Unbound Unbound: #'test/b>
test=> (first b)
[1 #<Unbound Unbound: #'test/b>]
test=> (second b)
2
显然,这不是它应该的工作方式。 我知道打印这样的结构会导致堆栈溢出,但我不需要打印它。我应该怎么做?
最佳答案
您可以执行以下操作:
(declare a b)
(def a [1 #'b])
(def b [#'a 2])
@(a 1)
=> [#'user/a 2]
请注意,#'
是一个引用变量的读取器宏。
虽然我仍然不太确定你为什么要这样做......试图让 vars 像这样相互依赖对我来说似乎是一种非常糟糕的代码味道。很可能无论您尝试做什么实际上都可以通过不同的方法得到最好的解决。
编辑
额外的评论指出问题与不同类型的实体相互引用有关,我认为更好的方法是使用关键字映射,例如
(def my-model
{:a
{:name "Entity A"
:references [:b]}
:b
{:name "Entity B"
:references [:a]}}
关于variables - 定义相互依赖的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9323251/