gpt4 book ai didi

clojure - 为什么非全局范围内的 ns 别名(let,def)不起作用?

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

尝试在 let 内部对 ns 进行别名以便能够在本地使用它,但出现错误 CompilerException java.lang.RuntimeException: No such namespace: sss当只是尝试使用别名时

(ns core 
(:require [clojure.set]
[clojure.string])
)

(let []
(alias 'sss 'clojure.string)
(println (ns-aliases *ns*) "hi1")
(println (sss/capitalize "hONdURas"))
;(println (clojure.string/capitalize "hONdURas")) ;;this works
(ns-unalias *ns* 'sss)
(+ 1 2)
)

(println (ns-aliases *ns*))

https://repl.it/repls/NoxiousRubberyComputationallinguistics

最佳答案

(别名...)不必是顶级的。 clojure 的工作方式是有一种叫做阅读器的东西,它获取文本数据并将其转换为作为编译器输入的数据结构。看

https://clojure.org/reference/reader

代码中引用的任何命名空间都必须在使用前为读者定义。 (类似于函数)。

所以,在

(let [] 
(alias 'sss 'clojure.string)
(println (sss/capitalize "aaa")))

当读者试图转动时,别名尚未分配
(sss/capitalize)

成数据。

关于clojure - 为什么非全局范围内的 ns 别名(let,def)不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49096554/

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