gpt4 book ai didi

clojure - Clojure 中的 :foo、::foo、::bar/foo 和 :bar/foo 之间有什么区别?

转载 作者:太空宇宙 更新时间:2023-11-03 18:37:30 29 4
gpt4 key购买 nike

我遇到了这些关键字::foo、::foo、::bar/foo 和 :bar/foo

您能举例说明差异吗?

最佳答案

:foo 是一个非完全限定的关键字。它没有关联的命名空间。

(name :foo)            ; => "foo"
(namespace :foo) ; => nil

:bar/foo 是命名空间限定的关键字。命名空间为bar,关键字名称为foo

(name :bar/foo)        ; => "foo"
(namespace :bar/foo) ; => "bar"

::foo 会将当前命名空间与关键字相关联,使其完全合格。假设当前命名空间是“user”:

*ns*                   ; => #namespace[user]
(name ::foo) ; => "foo"
(namespace ::foo) ; => "user"
::foo ; => :user/foo

::bar/foo 将尝试扩展任何别名以使其完全合格:

(create-ns 'my.namespace)       ; => #namespace[my.namespace]
(alias 'bar 'my.namespace) ; => nil
(name ::bar/foo) ; => "foo"
(namespace ::bar/foo) ; => "my.namespace"
::bar/foo ; => :my.namespace/foo

关于clojure - Clojure 中的 :foo、::foo、::bar/foo 和 :bar/foo 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42070694/

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