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

欢迎!有关如何使用此功能的一些更多信息,请参阅关于页面。

0
ClojureScript
编辑

正如标题所暗示的,def看起来是直接通过而不做任何事情。

即 "(def x)" 成功
但是 "(def x 10)" 失败,因为
"无法读取未定义的属性(正在读取'x'”)

在此文章中:https://script.clojure.org/guides/self-hosting

建议:simple优化应该可以工作

复现方法:https://github.com/sstraust/ClojureDefRepro(查看评论以获取说明)

如果您能创建一个包含您可运行以复现此问题的脚本的repo将非常有帮助。这将节省需要调查此问题的人的时间。
你好!附上的是一个GitHub仓库,可以复现错误。
您可以通过以下方法查看错误

- 打开顶层的index.html文件
- 然后,在JavaScript控制台中调用"example.core.call_eval_with_def()"

https://github.com/sstraust/ClojureDefRepro

仓库中包含了一个屏幕截图,显示了包含错误结果的javascript控制台。

谢谢!-- Sammy

1 个回答

+1

被选中
 
最佳答案

我没有运行代码,但我猜代码被编译成生成

cljs.user.x = 10;

cljs.user尚未定义的情况下。因此,当您尝试运行此代码时,它试图在cljs.user上设置x时,它失败。首先尝试创建cljs.user,或者在编译时提供已存在的:ns选项。

哇!这确实有效

添加了(ns cljs.user),看起来已解决了问题。

有趣的是,我之前已经尝试明确传递一个:ns选项,但我无法让它工作。但这可能是我自己的用户错误。
...