gpt4 book ai didi

Clojure:解析声明符号

转载 作者:行者123 更新时间:2023-12-04 12:24:07 25 4
gpt4 key购买 nike

在检查符号是否可以解析时,我会遇到一些奇怪的行为。

user=> ok
CompilerException java.lang.RuntimeException: Unable to resolve symbol: ok in this context, compiling:(NO_SOURCE_PATH:0)
user=> (resolve 'ok)
nil
user=> (if (resolve 'ok) "bla" (def ok 'ok))
"bla"
user=> ok
#<Unbound Unbound: #'user/ok>
user=> (def ok 'ok)
#'user/ok
user=> ok
ok

谁能告诉我这可能来自哪里?这种行为是有意的吗?

最佳答案

(def ok "whatever")创建一个名为 ok 的变量在编译时。编译器扫描整个表单来编译它,发现你将定义一个名为 ok 的变量。 ,并在您的表单实际执行之前为您创建它(没有绑定(bind))。当def form 实际执行时,表达式的运行时值将赋值给 var user/ok .在您的示例中,这永远不会发生,因为 var 已经创建,并且 if分支走另一条路。

使用 bound?作为替代是一个糟糕的想法,因为它测试了一些完全不同的东西:命名的 var (必须存在)是否具有永久或线程本地的绑定(bind)。

关于Clojure:解析声明符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8862325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com