请在2024 Clojure状态调查中分享您的想法!

欢迎!请查看关于页面了解有关该功能的一些更多信息。

0
ClojureScript

clojure.core中有一个bound?函数。

我在cljs.core中没有看到这个函数或类似的东西。

为什么会有这样的情况?有没有替代方案?

1 个回答

+1

选中
 
最佳答案

很可能是由于ClojureScript没有Var。 def直接使用JS变量,所以在Clojure中没有Var,也就没有根值、线程局部变量,也没有未绑定的Var,这意味着我们不需要bound?函数。

因此,在ClojureScript中,您可以假设您的def始终是已绑定的,默认为nil,如果您没有指定值。

所以,从某种意义上说,尽管它并不完全相同,您可以使用some?来代替。

ClojureScript

(def a)
(some? @#'a)
=> false

请注意,some?检查值,因此您需要解引用或直接使用值,如下所示

(some? a)
=> false

Clojure

(def a)
(bound? #'a)
=> false

但请注意

(def a nil)
(some? a)
=> false

以及

(def a nil)
(bound? #'a)
=> true

这就是为什么它们并不完全相同。

...