请在2024年Clojure调查!中分享您的想法。

欢迎!有关如何工作的更多信息,请参阅关于页面。

0
ClojureScript

使用deftype/defrecord定义并具有{{default}}字段的类型,在属性访问中将错误地返回{{nil}}。以下示例将返回{{nil}}。

`
(deftype Foo [default])

(let [foo (Foo. "bar")]
(.-default foo))
`

9 答案

0

由noprompt发表的评论

附上补丁。我应该指出,我不得不从编译器命名空间借用js-reserved,提供的警告信息将混入的符号信息硬编码,而不是重用编译器的munge函数。

0

由noprompt发表的评论

为了记录历史,我应该在补丁中提供更多上下文(由于某种原因,我无法编辑问题标题)。这不仅仅是{{.-default}},任何同时也是JavaScript标识符的字段名(例如{{public}}, {{private}}, {{if}})都会出现这种情况。

0

由dnolen发表的评论

请将{{js-reserved}}和任何像{{munge}}这样的辅助函数提升到共享命名空间{{cljs.util}}中,以便可以共享逻辑并避免硬编码。谢谢。

0

由noprompt发表的评论

你确定,David?这可能会使这个补丁变得有点嘈杂。如果没有问题,我很愿意这样做。

0

由dnolen发表的评论

我确定,我想避免这种代码重复。最终会更好,我们有更好的发展。

0

由noprompt发表的评论

更新以使用新的重构

0

由dnolen发表的评论

这个警告是不受欢迎的。相反,我们应该只是混合并确保属性访问始终有效。

0

由dnolen发表的评论

现在我们已经有了 CLJS-1620,一个警告似乎是一个好的答案。

0
参考: https://clojure.atlassian.net/browse/CLJS-871 (报告人:noprompt)
...