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 来重现此问题,这可能会有所帮助。这将为解决问题的人节省时间。
hi! 附件是一个包含重现错误的 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 选项,但是我没有能够让它工作。但这可能只是我自己的用户错误。
...